Skip to content
On this page

Linux 系统进程内存布局


标签:linux/basic  

内存分布图

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

memory space|300

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

img/202304121944.jpg

栈区

用于维护函数调用的上下文, 所以函数内部变量的也是在这里 - 当然除了 static 声明的函数局部变量 - malloc 什么的指针当然也撤销, 所以如果不在函数内部释放或者传出指针责备称为"内存泄露" 采用先进后出的数据结构, 类似与栈数据结构. 通常从用户空间的高地址处分类.

堆区

容纳程序动态分配的内存区域, 程序通过 mallocnew 声明的变量存储在这个地方 通常在低地址方向.

静态区

  • .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

Last updated: