代码和数据的区别也可以认为是编译时和运行时的分界线。编译器的绝大部分工作都跟翻译代码有关;必要时数据存储管理的绝大部分都在运行时进行。下面简单描述运行时系统隐藏的数据结构。
挡在一个可执行文件中运行size命令时,它会告诉你这个文件中的三个段(文本段、数据段和bss段)的大小:
检查可执行文件的内容的另一个方法是使用nm或dump实用工具。编译下面的源代码,在结果的a.out文件上运行nm程序(nm -sx a.out)。下图显示了编译器和链接器分别在这些段中写入了什么?
BSS段只保存没有值的变量,它并不占据目标文件的任何空间。
下图显示a.out在内存中布局情况。段在正在执行的程序中是一块内存区域,每个区域都有特定的目的。
当函数被调用时发生:过程活动记录
下面图显示代码例子用于显示程序执行在不同点时堆栈中活动记录情况。
本文摘自《C专家编程》