我寫下面的簡單的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/ 其中輸出如預期般完美。