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 ...