我写下面的简单的C程序(test.c的): -歧义行为
#include<stdio.h>
int main()
{
return 0;
}
和执行的follwing了解的.bss段大小的变化。
gcc test.c -o test
size test
输出来如: -
text data bss dec hex filename
1115 552 8 1675 68b test
我没有全局或静态范围声明任何东西。所以请解释为什么bss段大小是8个字节。
我提出了以下变化: -
#include<stdio.h>
int x; //declared global variable
int main()
{
return 0;
}
但令我惊讶的,产量为同以前: -
text data bss dec hex filename
1115 552 8 1675 68b test
请解释。 我然后初始化全局: -
#include<stdio.h>
int x=67; //initialized global variable
int main()
{
return 0;
}
数据段的大小随着预期,但没想到BSS段的大小减少到4(相反,以8被宣布没事的时候)。请解释。
text data bss dec hex filename
1115 556 4 1675 68b test
我也尝试了objdump和nm的命令,但他们也显示变量x占用.bss(在第二种情况下)。但是,尺寸命令中不显示bss尺寸的更改。
我按照以下程序按照: http://codingfox.com/10-7-memory-segments-code-data-bss/ 其中输出如预期般完美。