我有一段代码,其中有几个未初始化的全局变量,为了简单起见,我们假设 3:
int global_uninitialized_0;
int global_uninitialized_1;
int global_uninitialized_2;
编译此代码时,通过size报告bss的大小为16。
如果我添加更多全局未初始化变量,bss 将按预期增长。 然而,如果我使用整数数组,它的增长会超出我的预期:
int global_uninitialized_0;
int global_uninitialized_1;
int global_uninitialized_2[4];
编译此代码时,通过size报告bss的大小为48。 请注意,当使用 3 个元素的数组时,bss 也会按预期增长。
为什么会出现这种差异?我想说有某种对齐,但我找不到任何与之相关的东西。
在编译
x86_64
的测试时,我观察到以下布局:
readelf -Ws t.o | grep ' 3'
2: 0000000000000000 4 OBJECT GLOBAL DEFAULT 3 global_uninitialized_0
3: 0000000000000004 4 OBJECT GLOBAL DEFAULT 3 global_uninitialized_1
4: 0000000000000010 16 OBJECT GLOBAL DEFAULT 3 global_uninitialized_2
`.bss
的大小