在64位机器中,我编写了一个简单的C程序,如下所示:
#include <stdio.h>
int main(int argc,char* argv[])
{
printf("Hello,world!\n");
return 0;
}
然后gcc hello.c -o hello,size hello,我得到了:
text data bss dec hex filename
1156 492 16 1664 680 hello
接下来,我在源代码中添加一个全局int变量:
#include <stdio.h>
int global;
int main(int argc,char* argv[])
{
printf("Hello,world!\n");
return 0;
}
再次编译和大小,我得到了:
text data bss dec hex filename
1156 492 24 1672 688 hello
所以,问题是,bss段增加了8个字节,但为什么呢?只添加了一个int变量global。那应该是4。
BTW,gcc版本是4.4.7
答案 0 :(得分:5)
段大小向上舍入到8的下一个倍数,因此跟随它的任何内容都将在64位边界上对齐。无效的启动例程将使用64位存储。