• Text Segment

      Text Segment,通常也被称为代码段。

为了防止 heap 或是 stack 的溢出,text 段常被安排在 heap 或是 stack 之后。

Text 段通常是sharable 的, 所以对于使用频次比较高的程序,在内存中一般只有一份拷贝。另外,Text 段也常常只是 read-only 的,其目的是防止其中存放的指令被意外的修改。

  • Initialized Data Segment

Initialized Data Segment 通常被称作数据段,这里存放着在源代码中已经被初始化的全局变量和静态变量。

需要注意的是,数据段并不一定是 read-only 的,因为这里存放的变量,它们的值在程序运行期间是可以修改的。

例如:

char s[] = “hello world”;

int debug = 1;

int main (void)

{

return 0;

}

其中的 s 和 debug 变量是存放在 read-write 数据区。

再看一个例子:

char * string = “hello world”

其中的 “hello world” 是存放于 read-only 数据区的,而指针变量 string 则是存放于 read-write 数据区。

  • Uninitialized Data Segment

Uninitialized Data Segment,通常被称为 bss 段, 其名称来源于早期的表示 block started by symbol 的汇编操作符。在程序开始运行之前,由内核将存放于此数据段的数据初始化为0.

在程序中被初始化为 0 的、以及未给出明确初始值的全局变量和静态变量,被放置于此。

  • Stack

      Stack 被翻译为,其中的数据遵循后入先出(LIFO)原则。

局部变量,发生函数调用时 cpu 通用寄存器的值,被存储于栈中。

  • Heap

      Heap 的中文名称为,程序员动态 malloc/free 申请与释放的内存,即位于堆中。

下面通过 size(1) 命令对以上内容进行验证。

1.

2.

3.

4.

5.

6.

7.

参考文献:

http://www.geeksforgeeks.org/memory-layout-of-c-program/

Memory layout的更多相关文章

  1. Memory Layout for Multiple and Virtual Inheritance

    Memory Layout for Multiple and Virtual Inheritance(By Edsko de Vries, January 2006)Warning. This art ...

  2. Use Memory Layout from Target Dialog Scatter File

    参考 MDK-ARM Linker Scatter File的用法(转载) keil报错 Rebuild target 'Target 1' assembling test1.s... linking ...

  3. Kernel Memory Layout on ARM Linux

    这是内核自带的文档,讲解ARM芯片的内存是如何布局的!比较简单,对于初学者可以看一下!但要想深入理解Linux内存管理,建议还是找几本好书看看,如深入理解Linux虚拟内存,嵌入系统分析,Linux内 ...

  4. Memory Layout (Virtual address space of a C process)

    Memory Layout (Virtual address space of a C process) 分类: C语言基础2012-12-06 23:16 2174人阅读 评论(0) 收藏 举报 f ...

  5. Memory Layout of C Programs

    Memory Layout of C Programs   A typical memory representation of C program consists of following sec ...

  6. 【ARM-Linux开发】Linux内存管理:ARM Memory Layout以及mmu配置

    原文:Linux内存管理:ARM Memory Layout以及mmu配置 在内核进行page初始化以及mmu配置之前,首先需要知道整个memory map. 1. ARM Memory Layout ...

  7. Memory layout of x86_64 in Linux

    Blue : User Space 128TBRed : Kernel Space 512MBThe rest of the address space goes to various parts o ...

  8. C/C++ Memory Layout

    参考 http://www.cnblogs.com/skynet/archive/2011/03/07/1975479.html

  9. C Memory Layout C语言中的内存布局

    在C语言中,内存的主要分为下列几部分: 1. Text/Code Segment 文本/代码区 2. Initialized Data Segments 初始化的数据区 3. Uninitialize ...

随机推荐

  1. jquery live 区别

    http://www.360doc.com/content/13/1222/22/14022539_339358149.shtml 开始的时候在jQuery.1.7.1中使用了.live()觉得很好用 ...

  2. codeforces Gym - 101485 D Debugging (2015-2016 Northwestern European Regional Contest (NWERC 2015))

    题目描述: 点击打开链接 这题题意其实很不好理解,你有一个n行的程序,现在程序运行了r时间之后停止了运行,证明此处有一个bug,现在你需要在程序中加printf来调试找到bug所在的位置,你每次加一个 ...

  3. PHP SQL预处理

    php预处理查询 $query='insert into p1(info) values(?)'; $query2='select info from p1 where id=?'; $country ...

  4. 【JavaScript数据结构系列】06-双向链表DoublyLinkedList

    [JavaScript数据结构系列]06-双向链表DoublyLinkedList 码路工人 CoderMonkey 转载请注明作者与出处 1. 认识双向链表 不同于普通链表/单向链表,双向链表最突出 ...

  5. 二维DCT变换 | Python实现

    引言 最近专业课在学信息隐藏与数字水印,上到了变换域隐藏技术,提到了其中的DCT变换,遂布置了一个巨烦人的作业,让手动给两个\(8\times8\)的矩阵做二维DCT变换,在苦逼的算了一小时后,我决定 ...

  6. 关于Dev-C++一种引用头文件<iostream>问题(暴力解决)

    问题情况如下,因个人水平有限,不知道具体原因是啥,当引用头文件<iostream>时会出现如下问题,经排查,并不是头文件本身的问题,有可能是Dev哪一个文件被改动了,或者设置出了问题(前者 ...

  7. 一个 static 还能难得住我?

    static 是我们日常生活中经常用到的关键字,也是 Java 中非常重要的一个关键字,static 可以修饰变量.方法.做静态代码块.静态导包等,下面我们就来具体聊一聊这个关键字,我们先从基础开始, ...

  8. 通过一个vue+elementUI的小实例来讲解一下它们是如何使用的

    需求:点击一个按钮,弹出一个模态框,这个模态框有两个tab,tab中是各种报警条件,这些报警条件是从数据库中动态取出的,数据库中数据变更后,这个界面也要变更,我们可以查看和编辑这些报警条件.底部“确定 ...

  9. IC-二进制, 自然数, 有符号数

    https://mp.weixin.qq.com/s/9rGs9yN-OvLvEclnDZr87Q   零. 概念和结论 1. 数:概念名,指代物体的多少,即物体的量的概念: 2. 值:概念属性,数的 ...

  10. EntityFramework数据持久化 Linq介绍

    一.LINQ概述与查询语法 二.LINQ方法语法基础(重点) 三.LINQ聚合操作与元素操作(重点) 四.数据类型转换(重点) 一.LINQ概述与查询语法 1.LINQ(Language Integr ...