4

第一种情况:

#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

这是对的

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

4

1 回答 1

2

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

像第一种情况一样简单的程序有一个 4 字节的起始 bss,但分配了 8 个字节用于对齐目的,因此当您声明全局变量时,您填充了左边的 4 个字节。

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

于 2016-03-05T14:31:29.000 回答