C源代码经过编译链接后,生成的目标文件是以段为单位组织的,在C源代码中也可以人为修订段的分配与组合。在默认情况下,C语言程序编译后:
1)在已初始化段中包含数据表和可执行代码,常用的有3个:.test段、.cinit段和.const段。
●.text段中包含所有可执行的代码以及常量。
●.cinit段中包含赋有初始值的数据表。
●.const段中则包含已用const声明的外部或静态数据表以及字符串常量。
2)未初始化段在存储器(通常为RAM)中,用于程序运行时创建和存储变量,常用的有两个:.bss段和.stack段。
●.bss段用于为全局和静态变量保留空间,在程序开始执行时,由C引导程序将.cinit段中的已初始化数据复制到.bss段中。
●.stack段用做C的系统堆栈,向被调函数传递参数,并为局部变量分配空间。(www.xing528.com)
在上述5个常用段中,.text段和.cinit段被固定链接至程序存储空间,存储器类型可以是ROM或RAM(一般为ROM,具体取决于编译时RAM或ROM方式的选择);.bss段和.stack段则被固定链接至数据存储空间,存储器类型只能是RAM。而.const段的使用则较为灵活。.const段被固定链接至数据空间,但存储器类型可以是ROM或RAM。这就有别于.cinit段:.cinit段被链接至程序空间,程序执行时,再被复制到数据空间中的.bss段中。这样,一张未用const声明的数据表要同时占用程序(.cinit段)和数据空间(.bss段)的一部分。与之相比较,如果系统支持数据ROM,则该数据表改用const声明后,只需占用数据空间(.const段)的一部分。如果直接使用了汇编,还可能用到.data段以及自命名的已初始化(代码)段和未初始化(变量)段。
以下列举了一些C语言编译过程中常用的段,见表5-7。
表5-7 C语言编译过程中常用的段
在程序编译中,源代码与编译后生成段的关系示意图,如图5-6所示。
图5-6 源代码与编译后生成段的关系示意图
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。