深入浅出程序运行时内存结构

💡 原文中文,约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>命令也可以用来查看内存分布。
➡️

继续阅读