全局/靜態變量初始化爲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。



來源:http://blog.csdn.net/zhengxianghdu/article/details/9022867

發佈了17 篇原創文章 · 獲贊 33 · 訪問量 39萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章