Chinaunix首页 | 论坛 | 博客
  • 博客访问: 283280
  • 博文数量: 43
  • 博客积分: 2515
  • 博客等级: 少校
  • 技术积分: 510
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-10 16:15
文章存档

2009年(2)

2008年(12)

2007年(29)

我的朋友

分类: C/C++

2007-06-09 23:47:21

    一个典型的C程序存储空间布局由以下几个部分组成:
    正文段:CPU执行的指令部分,也就是主要的程序代码编译出来的结果,只读,通常可以共享。
    初始化数据段:通常称之为数据段,包含了程序中需要明确赋值的变量,譬如一些初始化的全局变量等,如 int a = 10,变量名和值都存放在这个段中。
    未初始化数据段:通常称之为BSS(Block Started by Symbol)段,包含了程序中没有进行赋值的变量,譬如一些未初始化的全局变量,如 int a,在程序执行之前,内核会把这部分全部置为0(NULL),
    栈:自动变量以及每次函数调用时所需保存的信息放在此段中。如函数调用时要保存返回地址等。栈是从上向下分配的。
    堆:通常在堆中进行动态存储分配,如malloc, calloc, realloc等都从这里面分配。堆是从下向上分配的。

    通常堆顶和栈底之间的虚拟地址空间是很大的。
    对X86处理器上的Linux,正文段从0x08048000开始,栈底则从0xC0000000之下开始。

    下图是一个典型的C程序存储空间的逻辑布局:
   

阅读(1999) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~