带有全局数组的 bss 段大小

问题描述 投票:0回答:1

我有一段代码,其中有几个未初始化的全局变量,为了简单起见,我们假设 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 也会按预期增长。

为什么会出现这种差异?我想说有某种对齐,但我找不到任何与之相关的东西。

gcc memory elf
1个回答
0
投票

在编译

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

的大小
© www.soinside.com 2019 - 2024. All rights reserved.