c程序存储空间布局——各数据段的内存位置

c程序存储空间布局——各数据段的内存位置

ID:8970549

大小:71.00 KB

页数:2页

时间:2018-04-13

c程序存储空间布局——各数据段的内存位置_第1页
c程序存储空间布局——各数据段的内存位置_第2页
资源描述:

《c程序存储空间布局——各数据段的内存位置》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、从历史上讲,C程序一直由下面几部分组成:(1)栈由编译器自动分配释放管理。局部变量及每次函数调用时返回地址、以及调用者的环境信息(例如某些机器寄存器)都存放在栈中。新被调用的函数在栈上为其自动和临时变量分配存储空间。通过以这种方式使用栈,C函数可以递归调用。递归函数每次调用自身时,就使用一个新的栈帧,因此一个函数调用实例中的变量集不会影响另一个函数调用实例中的变量。a.局部变量b.函数调用时返回地址c.调用者的环境信息(例如某些机器寄存器)(2)堆需要由程序员分配释放管理,若程序员不释放,程序结束时可能由OS回收。通常在堆中进行动态存储分配。如程序中的mallo

2、c,calloc,realloc等函数都从这里面分配。堆是从下向上分配的。(3)非初始化数据段通常将此段称为bss段,这一名称来源于早期汇编程序的一个操作符,意思是“blockstartedbysymbol(由符号开始的块)”,未初始化的全局变量和静态变量存放在这里。在程序开始执行之前,内核将此段初始化为0。函数外的说明:longsum[1000];使此变量存放在非初始化数据段中。a.未初始化的全局变量b.未初始化的静态变量(4)初始化的数据通常将此段称为数据段,它包含了程序中需赋初值的变量。初始化的全局变量和静态变量存放在这里。例如,C程序中任何函数之外的说明

3、:intmaxcount=99;使此变量以初值存放在初始化数据段中。a.初始化的全局变量b.初始化的静态变量(5)正文段CPU执行的机器指令部分。通常,正文段是可共享的,所以即使是经常环境指针环境表环境字符串执行的程序(如文本编辑程序、C编译程序、shell等)在存储器中也只需有一个副本,另外,正文段常常是只读的,以防止程序由于意外事故而修改其自身的指令。下面的内存结构显示了这些段的典型安排:下面给出一般的c程序存储布局的典型安排:用户空间的程序使用低2G的虚拟内存,内核空间使用高2G高地址——0x7FFFFFFF———命令行参数和环境变量——————————栈

4、空间,向下增长___________________堆空间,向上增长———————————未初始化的数据———————————已初始化的数据———————————正文段低地址—0x00000000————可以注意到未初始化的数据段的内容并不放在磁盘上的程序文件中,因为,在程序开始运行前他们都被设置为0。需要存放在程序文件中的只有正文段和初始化数据段。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。