第一种情况:
#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/