深入浅出程序运行时内存结构
💡
原文中文,约900字,阅读约需3分钟。
📝
内容提要
TLPI一书第六章图展示了程序的内存分布,包括Text、Initialized data、Uninitialized data、Heap和Stack等部分。在Linux上可用size命令查看各部分大小。
🎯
关键要点
- TLPI一书第六章展示了程序的内存分布,包括Text、Initialized data、Uninitialized data、Heap和Stack。
- 在Linux x86-32上,程序的内存地址从低向上增长。
- Text段存放程序指令,Initialized data段存放初始化的全局变量和静态变量。
- Uninitialized data段存放未初始化的全局变量和静态变量,系统在启动前将其初始化为0。
- BSS是未初始化数据段的别称,源于汇编程序助记符 'block started by symbol'。
- Heap存放程序运行时动态申请的数据,Stack在函数调用时动态扩缩容。
- 每次函数调用会创建一个新的栈帧,用于存放函数参数、变量和返回值,栈向下增长。
- 可以使用size命令查看不同内存部分的大小。
- Data表示Initialized data区,dec和hex是前三个区域的总和。
- rodata区域一般不展示,可以使用objdump和readelf命令查看。
- GDB的info sections和x/<num>x <address>命令也可以用来查看内存分布。
➡️