:
堆栈段
空洞
a. a.out神奇数字
b. a.out的其他内容
c. BSS数据段所需大小 ----------------------------------------> BSS段
d. 数据段(初始化后的全局和静态变量)--------------------> 数据段
e. 文本段(可执行文件的指令) --------------------> 文本段
代码段包含要执行的指令,数据段包含经过初始化的全局和静态变量以及他们的值(可能不同的编译器的某些特性稍有差异),BSS段的大小从可执行文件的bss段得到,紧跟在数据段之后,当bss内采取进入程序的地址空间后全部清0,数据段和BSS段统称数据区。
这些区域还不足以满足一个程序的所有需求,因为一个进程还需要保存局部变量、临时变量、传递到函数中的参数以及返回值等,堆栈段就是用于这个目的。当然也少不了堆空间,用于满足进程的动态分配内存的需求。
要注意的是一个用户进程的虚拟地址空间最低部分并未被映射,就是说在进程的最低虚拟地址的几K字节没有做页表映射(赋予物理地址),这样它可以用于捕捉空指针和小整形值得指针引用内存情况。