日期:2014-05-16  浏览次数:20582 次

[原创]Unix下C程序的内存布局

从<Unix高级环境编程>中总结

按照高位排序:

1.,自动变量存储,每次函数调用的信息如函数结束后返回到的地址,调用者的环境信息.新调用的函数会为其自动临时变量分配空间.这就是递归函数的重点,每一次递归函数自我调用,一个新的栈帧会创建,因此他们的数据不会互相干涉到.

2.,程序运行时动态分配的数据会被存储在此.

3.未初始化数据段,通常被称为"bss"段,包含在程序中未被显式地初始化的全局变量,在程序被执行前,该段中的数据被内核初始化为数字0或者空指针.

4.已初始化数据段,通常被称为"data"段,包含在程序中被显式地初始化的全局变量.

5.文字段,通常被称为"code"段,CPU可执行的机器指令(二进制代码),文字段是可共享的,因此对于频繁使用的程序,在内存中仅需要维护一份.