ZHCUAQ1F july 2015 – april 2023
编译器生成可重定位的代码块和数据块。这些块,称为段,以各种方式分配在内存中,以符合各种系统配置。有关编译器如何使用这些段的完整说明,请参阅节 8.1.1。
编译器创建两种基本类型的段:初始化段和未初始化段。表 6-1 总结了初始化段。表 6-2 总结了未初始化段。
名称 | 内容 |
---|---|
.args | 在引导程序调用 main() 函数之前保留用于复制命令行参数的空间。请参阅节 3.6。 |
.binit | 引导时间复制表(有关链接器命令文件中 BINIT 的信息,请参阅 TMS320C6000 汇编语言工具用户指南) |
.c6xabi.exidx | 用于异常处理的索引表;只读(请参阅 --exceptions 选项)。 |
.c6xabi.extab | 用于异常处理的展开指令;只读(请参阅 --exceptions 选项)。 |
.cinit | 除非指定了 --rom_mode 链接器选项,否则编译器不会生成 .cinit 段。如果指定了 --rom_mode,链接器就会创建此段,其中包含用于显式初始化的全局变量和静态变量的表。 |
.const | 全局和静态常量变量,包括字符串常量以及局部变量的初始化值。 |
.data | 显式初始化的全局和静态非常量变量。 |
.fardata | 显式初始化的远非常量全局和静态变量。 |
.init_array | 启动时要调用的构造函数表。 |
.name.load | 段名称 的压缩图像;只读(有关复制表的信息,请参阅 TMS320C6000 汇编语言工具用户指南。) |
.neardata | 显式初始化的近非常量全局和静态变量。 |
.ovly | 复制除引导时间 (.binit) 复制表以外的表。只读数据。 |
.ppdata | 用于基于编译器的分析的数据表(请参阅 --gen_profile_info 选项)。 |
.ppinfo | 用于基于编译器的分析的相关性表(请参阅 --gen_profile_info 选项)。 |
.rodata | 具有 近 和 常量 限定符的全局和静态变量。 |
.switch | 大型切换语句的跳转表。 |
.text | 用于可执行代码的标准默认段。--gen_func_subsections 选项使代码放置在每个函数 func() 单独的 .text:func 段中。 |
.TI.crctab | 生成的 CRC 校验表。只读数据。 |
名称 | 内容 |
---|---|
.bss | 未初始化全局和静态变量 |
.cio | 运行时支持库中 stdio 函数的缓冲区 |
.far | 声明为远的全局和静态变量 |
.stack | 栈 |
.sysmem | 用于动态内存分配(malloc 等)的内存池(堆) |
链接程序时,必须指定内存中分配这些段的位置。通常,初始化段链接到 ROM 或 RAM 中,而未初始化段链接到 RAM 中。除代码段外,编译器创建的初始化段和未初始化段不能分配到内部程序内存中。
链接器提供了 MEMORY 和 SECTIONS 指令用于分配段。有关将段分配到存储器中的更多信息,请参阅 TMS320C6000 汇编语言工具用户指南。