1. 程式人生 > >全域性/靜態變數初始化為0放在bss段還是data段

全域性/靜態變數初始化為0放在bss段還是data段

2013-6-4上午去面試,被鄙視了,技術公司大牛的風範,好犀利!不過我這題應該是蒙對了。。

如:static unsigned char s_test = 0;

這個靜態變數是放到bss段還是data段呢,以下是我編譯的結果:(全域性變數也是如此)

1.看這樣子,即使是初始化了,但是初始化的是0,還是放在bss段的

2.這裡還有一個問題,即使是全域性定義了一個變數,若後面程式不使用的話,還是預設不分配這個變數空間的.

(至少說ARM的ADS編譯器是如此,是否具有普遍性,暫時還不知道 -  - ! )

3.注:

可執行程式包括BSS段、資料段程式碼段(也稱文字段)。

BSS(Block Started by Symbol)通常是指用來存放程式中未初始化的

全域性變數靜態變數的一塊記憶體區域。特點是:可讀寫的,在程式執行之前BSS段會自動清0。所以,未初始的全域性變數在程式執行之前已經成0了。

注意和資料段的區別,BSS存放的是未初始化的全域性變數靜態變數,資料段存放的是初始化後的全域性變數和靜態變數。

UNIX下可使用size命令檢視可執行檔案的段大小資訊。如size a.out。