大小效用的奇怪行为

Strange behaviour of size utility

第一种情况:

#include <stdio.h>

int main(void)
{
    return 0;
}

尺寸输出:

text       data     bss     dec     hex filename

1115        552       8    1675     68b ./a.out

第二种情况:

#include <stdio.h>

int global;  // new line compared to previous case

int main(void)
{
    return 0;
}

尺寸输出:

text       data     bss     dec     hex filename
1115        552       8    1675     68b ./a.out

理想情况下应该是:

bss=12 and all other (text and data) same

第三种情况:

#include <stdio.h>

int global;

int main(void)
{
    static int i;  // new line compared to previous case
    return 0;
}

尺寸输出:

text       data     bss     dec     hex filename
1115        552      16    1683     693 ./a.out

这是正确的

为什么第二种情况的输出不正确?

您可能正在针对 64 位架构进行编译,其中内存对齐到 8 字节(64 位)。

一个像第一个例子中的程序一样简单的程序有一个 4 字节的起始 bss,但是为了对齐目的分配了 8 个字节,所以当你声明 global 变量时, 你填满了左边的 4 个字节。

声明另一个 4 字节的变量将向 bss 添加 8 个字节,直到它也被填满,依此类推。