第一案:
#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
第3例:
#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
这是正确的
为什么第二种情况下的输出不正确?
答案 0 :(得分:2)
你可能正在为64位架构进行编译,你可以将内存对齐到8个字节(64位)。
像第一种情况一样简单的程序有一个4字节的起始bss,但是为了对齐目的分配了8个字节,所以当你声明全局变量时,你填满了留下4个字节。
声明另一个4字节变量将向bss添加8个字节,直到它也被填充,依此类推。