c – 大小实用程序的奇怪行为

第一例:

#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个字节,直到它也被填充,依此类推.

点赞