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