Appearance

这是一个 32 位操作系统的内存寻址表, 这张图其实并不完整, 还有一个保留区 ( reserved ), 中间还有一个动态链接库映射区 ( dynamic libraries ):

*图片来来自《程序员的自我修养》第 10.1 章节

栈区
用于维护函数调用的上下文, 所以函数内部变量的也是在这里 - 当然除了 static 声明的函数局部变量 - malloc 什么的指针当然也撤销, 所以如果不在函数内部释放或者传出指针责备称为"内存泄露" 采用先进后出的数据结构, 类似与栈数据结构. 通常从用户空间的高地址处分类.
堆区
容纳程序动态分配的内存区域, 程序通过 malloc 和 new 声明的变量存储在这个地方 通常在低地址方向.
静态区
- .bss 段, 存储未初始化的全局和静态变量
- .data 段, 存储初始化的全局和静态变量
- .ro 段 ( read-only ), 宏定义, 字符串常量, const 全局变量
- .txt 段, 存储二进制文件
用 size 指令查看一个二进制可执行文件,可以看到:
bash
$ size a.out
text data bss dec hex filename
3520 712 16 4248 1098 a.out虚拟内存地址
#TBD/LV2