一个典型的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) |