编译器生成称为段 的可重定位代码块和数据块,这些代码块以多种方式分配到内存中,以符合各种系统配置。有关各段及其分配的更多信息,请参阅 TMS320C6000 汇编语言工具用户指南 中介绍的目标文件信息。。
段有两种基本的类型:
- 初始化段包含数据或可执行代码。初始化段通常是只读的;例外情况如下所示。C/C++ 编译器会创建以下初始化段:
- .args 段包含基于主机的加载程序的命令参数。请参阅 --arg_size 选项。
- .binit 段包含引导时复制表。有关 BINIT 的详细信息,请参阅 TMS320C6000 汇编语言工具用户指南。
- 只有在使用 --rom_model 选项时,才会创建 .cinit 段。它包含显式初始化的全局变量和静态变量表。
- .init_array 段包含用于调用全局构造函数的表。
- .ovly 段包含联合的复制表,其中的不同段具有相同的运行地址。
- .c6xabi.exidx 段包含用于异常处理的索引表。.c6xabi.extab 段包含用于异常处理的堆栈展开指令。有关详细信息,请参阅 --exceptions 选项。
- .name.load 段包含段 名称 的压缩映像。有关复制表的信息,请参阅TMS320C6000 汇编语言工具用户指南。
- .ppdata 段包含用于基于编译器的分析的数据表。有关详细信息,请参阅 --gen_profile_info 选项。此段是可写的。
- .ppinfo 段包含用于基于编译器的分析的相关性表。有关详细信息,请参阅 --gen_profile_info 选项。
- .const 段包含字符串文字、浮点常量,以及使用 C/C++ 限定符 far 和 const 定义的数据(前提是该常量未定义为 volatile 或 节 7.5.2 中描述的异常之一)。字符串文字放置在 .const:.string 子段中,以更大力度地控制链接时放置位置。
- .fardata 段为初始化的非常量 far 全局变量和静态变量保留空间。此段是可写的。
- .neardata 段为初始化的非常量 near 全局变量和静态变量保留空间。此段是可写的。
- .rodata 段为 const near 全局变量和静态变量保留空间。
- .switch 段包含用于大型switch 语句的跳转表。
- .text 段包含所有可执行代码和由编译器生成的常量。此段通常是只读的。
- .TI.crctab 段包含 CRC 检查表。
- 未初始化的段会在存储器中保留空间(通常为 RAM)。程序可以在运行时使用此空间来创建和存储变量。编译器会创建以下未初始化的段:
- .bss 段为未初始化的全局变量和静态变量保留空间。未初始化且也未使用的变量通常创建为通用符号(除非指定了 --common=off),而不是放置在 .bss 中,以便将该变量从生成的应用中排除。
- .far 段为已声明为 far 的全局变量和静态变量保留空间。
- .stack 段为系统栈保留空间。
- .sysmem 段为动态存储器分配保留空间。此空间由动态存储器分配例程使用,如 malloc()、calloc()、realloc() 或 new()。如果 C/C++ 程序不使用这些函数,编译器不会创建 .sysmem 段。
注: 仅使用程序存储器中的代码除代码段外,已初始化和未初始化的段不能分配到内部程序存储器中。
汇编器会创建默认段 .text、.bss和 .data。您可以指示编译器使用 CODE_SECTION 和 DATA_SECTION pragma 创建其他段(请参阅节 7.9.3和节 7.9.6)。