通过将来自链接在一起的对象文件(.o
文件)的各输入节加以并置,即可创建可执行文件。默认情况下,编译器会跨标准节和明确定义的节创建代码。每个节都根据其关联的含义和用途来命名。下表中显示了对象文件的各标准节。
除了这些节外,您还可以创建自己的定制节,并将其分配到您所选的存储器。
章节 | 描述 |
---|---|
.text | 文本节 |
.rodata | 只读数据节 |
.sdata2 | 小型只读数据节 |
.sbss2 | 小型只读未初始化数据节 |
.data | 读/写数据节 |
.sdata | 小型读/写数据节 |
.sbss | 小型未初始化数据节 |
.bss | 未初始化数据节 |
.heap | 程序堆存储器节 |
.stack | 程序栈存储器节 |
通常不支持您修改的保留节包括:.init
、.fini
、.ctors
、.dtors
、.got
、.got2
和 .eh_frame
。
-
.text
- 对象文件的该节包含可执行程序指令。本节包含
x
(可执行)、r
(只读)和i
(已初始化)标志。这表示本节可以分配到已初始化的只读存储器 (ROM),该 ROM 可从处理器指令总线寻址。 -
.rodata
- 本节包含只读数据。本节包含
r
(只读)和i
(已初始化)标志。与.text
节类似,本节同样可以分配到已初始化的只读存储器,可从处理器数据总线寻址。 -
.sdata2
- 本节与
.rodata
节类似。它包含大小小于 8 字节的小型只读数据。本节中的所有数据均可通过引用只读小型数据锚点来访问。这样即可确保本节的所有内容均可使用单一指令来访问。您可通过给编译器添加-G
选项来更改进入本节的数据的大小。本节包含r
(只读)和i
(已初始化)标志。 -
.data
- 本节包含读/写数据,并具有
w
(读/写)标志和i
(已初始化)标志。它必须映射到已初始化的随机存取存储器 (RAM)。不得将其映射到 ROM。 -
.sdata
- 本节包含大小小于 8 字节的小型读/写数据。您可通过
-G
选项来更改进入本节的数据的大小。本节中的所有数据均可通过读写小型数据锚点来访问。这样即可确保本节的所有内容均可使用单一指令来访问。本节包含w
(读/写)标志和i
(已初始化)标志,并且必须映射到已初始化的 RAM。 -
.sbss2
- 本节包含大小小于 8 字节且未初始化的小型只读数据。您可通过
-G
选项来更改进入本节的数据的大小。本节包含r
(读取)标志,可映射到 ROM。 -
.sbss
- 本节包含大小小于 8 字节且未初始化的小型数据。您可通过
-G
选项来更改进入本节的数据的大小。本节包含w
(读/写)标志,并且必须映射到 RAM。 -
.bss
- 本节包含未初始化的数据。本节包含
w
(读/写)标志,并且必须映射到 RAM。 -
.heap
- 本节包含未初始化的数据,这些数据用作为全局程序堆。动态存储器分配例程会从本节分配存储器。本节必须映射到 RAM。
-
.stack
- 本节包含未初始化的数据,这些数据用作为程序栈。本节必须映射到 RAM。本节通常紧随在
.heap
节之后。在某些版本的连接器中,.stack
节和.heap
节可能显示为合并在一起,组成名为.bss_stack
的节。 -
.init
- 本节包含语言初始化代码,并具有与
.text
相同的标志。它必须映射到已初始化的 ROM。 -
.fini
- 本节包含语言清理代码,并具有与
.text
相同的标志。它必须映射到已初始化的 ROM。 -
.ctors
- 本节包含在程序启动时必须调用的函数的列表,所含标志与
.data
相同,并且必须映射到已初始化的 RAM。 -
.dtors
- 本节包含在程序结束时必须调用的函数的列表,所含标志与
.data
相同,并且必须映射到已初始化的 RAM。 -
.got2/.got
- 本节包含指向程序数据的指针,所含标志与
.data
相同,并且必须映射到已初始化的 RAM。 -
.eh_frame
- 本节包含帧展开信息,用于异常处理。它所含标志与
.rodata
相同,并且可映射到已初始化的 ROM。 -
.tbss
- 本节包含未初始化的线程本地数据,这些数据构成程序存储器镜像。本节所含标志与
.bss
相同,并且必须映射到 RAM。 -
.tdata
- 本节包含已初始化的线程本地数据,这些数据构成程序存储器镜像。本节必须映射到已初始化的 RAM。
-
.gcc_except_table
- 本节包含特定于语言的数据。本节必须映射到已初始化的 RAM。
-
.jcr
- 本节包含寄存已编译的 Java 类所需的信息。其中内容特定于编译器,供编译器初始化函数使用。本节必须映射到已初始化的 RAM。
-
.fixup
- 本节包含执行修复所需的必要信息,例如,修复页表和修复记录表。本节必须映射到已初始化的 RAM。