第一种情况:

#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 个字节用于对齐目的,因此当您声明全局变量时,您填充了左边的 4 个字节。

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

关于c - 尺寸效用的奇怪行为,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35812381/

10-15 00:13