ZHCU820Y September 2004 – June 2021
编译器使用直接初始化来初始化全局变量。例如,考虑以下 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 段视为任何其他初始化段,并创建输出段。在加载时初始化模型中,段被加载到存储器中并由程序使用。请参阅Topic Link Label7.9.3.5。
在运行时初始化模型中,链接器使用这些段中的数据创建初始化数据和附加的压缩初始化表。启动例程会处理初始化表,将数据从加载地址复制到运行地址。请参阅Topic Link Label7.9.3.3。