码迷,mamicode.com
首页 > 其他好文 > 详细

Memory layout

时间:2017-09-08 14:57:29      阅读:203      评论:0      收藏:0      [点我收藏+]

标签:write   使用   malloc   数据段   pad   代码段   动态   debug   原则   

  • 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

标签:write   使用   malloc   数据段   pad   代码段   动态   debug   原则   

原文地址:http://www.cnblogs.com/outs/p/7494236.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!