程序编译后生成的目标文件至少含有三个段,分别为:.text、.data和.bss。这三个段的大致结构图如下所示:

其中.text即为代码段,为只读。.bss段包含程序中未初始化的全局变量和static变量。
data段包含三个部分:heap(堆)、stack(栈)和静态数据区。
当程序在执行时动态分配空间(C中的malloc函数),所分配的空间就属于heap。其概念与数据结构中“堆”的概念不同。
stack段存放函数内部的变量、参数和返回地址,其在函数被调用时自动分配,访问方式就是标准栈中的LIFO方式。(因为函数的局部变量存放在此,因此其访问方式应该是栈指针加偏移的方式,否则若通过push、pop操作来访问相当麻烦)
data段中的静态数据区存放的是程序中已初始化的全局变量、静态变量和常量。
以上纯属个人理解,若有错误,望留言相告,以免误及他人。
程序编译与内存布局
本文介绍了程序编译后的目标文件结构,包括.text、.data和.bss三个主要段落。详细解释了各段的功能,如代码段的只读特性、.bss段存储未初始化变量、data段内静态数据区的用途等。
800

被折叠的 条评论
为什么被折叠?



