ZHCADC3B February 2019 – October 2023
在编译器或汇编器输出的可重定位目标文件中,使用默认规则和编译器指令将变量分配到各个段中。段是可重定位文件中不可分割的分配单元。段通常包含具有类似属性的对象。为数据指定了各种段,具体取决于该段是否已初始化、是可写还是只读的、如何寻址,以及包含的数据类型。
有关静态变量在段中的位置以及如何寻址这些变量的约定,请参阅 节 4.4.2。
链接器将来自目标文件的段组合起来,形成 ELF 加载模块(可执行文件)中的区段。区段是分配给加载模块的连续存储器范围,表示程序执行映像的一部分。
加载模块可包含一个或多个数据区段,链接器在其中分配栈、堆和静态变量。项可分组为单个区段或多个区段,仅受以下限制:
运行时环境可动态分配或调整未初始化的数据区段,以便为栈和堆等项分配空间。
图 4-1 展示了 ABI 定义的数据段,以及段到区段的抽象映射。该映射仅是代表性的;具体配置可能因平台或系统而异。初始化段为蓝色阴影;未初始化段为灰色阴影。
.const 段包含只读常量。.const 段可位于只读存储器中,并且可使用绝对寻址来寻址。
.data 段包含初始化的读写数据。
.bss 段包含未初始化的读写数据。
节 11.3.5 中列出了可由链接器命令文件放置的其他特殊段。