C语言内存模型详解
second60 20180415
1 内存模型
在C语言中,内存可分用五个部分:
1. BSS段(Block Started by Symbol): 用来存放程序中未初始化的全局变量的内存区域。
2. 数据段(data segment): 用来存放程序中已初始化的全局变量的内存区域。
3. 代码段(text segment): 用来存放程序执行代码的内存区域。
4. 堆(heap):用来存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc分配内存时,新分配的内存就被动态添加到堆上,当进程调用free释放内存时,会从堆中剔除。
5. 栈(stack):存放程序中的局部变量(但不包括static声明的变量,static变量放在数据段中)。同时,在函数被调用时,栈用来传递参数和返回值。由于栈先进先出特点。所以栈特别方便用来保存/恢复调用现场。
APUE中的一个典型C内存空间分布图
如下往上,分别是text段,data段,BSS段,堆,栈
Linux下32位环境的用户空间内存分布情况
由上图可知:
0x0000 0000:保留区域, 最底层
代码区:用来存放程序代码和常量,只读(