sizeof與結(jié)構(gòu)體
首先看微軟實(shí)習(xí)生的一道選擇題












































結(jié)果是 8 , 8 , 12 。有些驚奇吧。
2 造成這結(jié)果的主要原因是,結(jié)構(gòu)體內(nèi)的變量有著位對(duì)齊的機(jī)制。
(1)結(jié)構(gòu)體變量的首地址應(yīng)該能夠被結(jié)構(gòu)體內(nèi)最寬的變量所整除。
(2)結(jié)構(gòu)體中每一個(gè)變量相對(duì)于首地址的位置都應(yīng)該是成員大小的整數(shù)倍。
(3)結(jié)構(gòu)體的總大小應(yīng)該為結(jié)構(gòu)體中的最寬基本類型的整數(shù)倍。
結(jié)構(gòu)體A的中含有兩個(gè)int類型變量,故其大小為8。
結(jié)構(gòu)體B中含有一個(gè)int 大小為4,一個(gè)char大小為1,但是應(yīng)該最寬的成員來分配內(nèi)存空間。故也為8.而不是所認(rèn)為的5.
另外static 的變量存儲(chǔ)在全局變量中,SIZEOF(B)為在棧內(nèi)存空間中,所以結(jié)構(gòu)體中不會(huì)為static變量分配內(nèi)存。
結(jié)構(gòu)體C中,int最寬,所以short和char均占有4個(gè)字節(jié),故結(jié)果為12.
posted on 2011-04-11 19:34 kahn 閱讀(520) 評(píng)論(1) 編輯 收藏 引用