ZHCUAV8W january 1998 – march 2023 66AK2E05 , 66AK2H06 , 66AK2H12 , 66AK2H14 , AM1705 , AM1707 , AM1802 , AM1806 , AM1808 , AM1810 , AM5K2E04 , OMAP-L132 , OMAP-L137 , OMAP-L138 , SM470R1B1M-HT , TMS470R1A288 , TMS470R1A384 , TMS470R1A64 , TMS470R1B1M , TMS470R1B512 , TMS470R1B768
编译器使用直接初始化来初始化全局变量。例如,考虑以下 C 代码:
int i = 23;
int a[5] = { 1, 2, 3, 4, 5 };
编译器将变量“i”和“a[]”分配给 .data 段,并直接放置初始值。
.global i
.data
.align 4
i:
.field 23,32 ; i @ 0
.global a
.data
.align 4
a:
.field 1,32 ; a[0] @ 0
.field 2,32 ; a[1] @ 32
.field 3,32 ; a[2] @ 64
.field 4,32 ; a[3] @ 96
.field 5,32 ; a[4] @ 128
定义静态或全局变量的每个编译模块都包含这些 .data 段。链接器将 .data 段视为任何其他初始化段,并创建输出段。在加载时初始化模型中,段被加载到存储器中并由程序使用。请参阅节 6.10.3.5。
在运行时初始化模型中,链接器使用这些段中的数据创建初始化数据和附加的压缩初始化表。启动例程会处理初始化表,将数据从加载地址复制到运行地址。请参阅节 6.10.3.3。