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

2021-07-03 09:07:12 字數 823 閱讀 8234

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。

靜態變數初始化順序

1.begin a a a a,from a的物件 a a,a.num01 0 a a,b.num02 0 a a,b.instance a null end a a begin a a a a,from a的物件 a a,a.num01 1 a a,b.num02 1 a a,b.instance...

final非靜態變數初始化

size medium final變數可以在任何可以被始化的地方被始化,具體應該是建構函式之前或建構函式中,但只能被初始化一次.一旦被初始化後就不能再次賦 值 重新指向其它物件 作為成員變數一定要顯式初始化,而作為臨時變數則可以只定義不初始化 當然也不能引用 即使是作為乙個類中的成員變數,也還可以在...

Java中靜態變數和非靜態變數的初始化順序

先看下面的程式 package c05.net class bowl void f1 class cupboard static bowl b3 new bowl 3 class table table string a,int i public class order public static ...