C語言中 sizeof 與 struct

C語言中,struct是由不同類型的變量組成的。


struct在內存存儲時,是按照內存對齊來存放的,即開始和結束的地址都是n的倍數,這個n是由struct最長的變量類型決定的。

也就是struct的大小一定是n的整數倍。

例如一個struct含有double型,那麼 n 就是8字節。

還有一個要滿足的條件,每一種變量的存放的首地址也要是其自身大小的倍數。

下面簡單起見,空字節用0表示。

{char, char, char, short, int }在內存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

  sizeof後的大小爲 12Byte,char只要是地址就可以放,因爲他的大小是1B,而short佔了2B,所以存放的時候要空出1B才能保證粗放地址是2的倍數,int同理。

{char, char, char, short, int,char }在內存中存放位置如下(每一行代表32bit)

             char, char, char,  0

                 short,    0,  0

              int,

             char

sizeof後的大小爲 16Byte,最後一個char的存放雖然只佔用了1個字節,但是計算stuct大小是,必須是4B(int的大小)的倍數,


注:某些編譯器會優化struct中變量的順序,以保證佔用空間最小,對於第二個例子,會把最後一個char放到第四個空字節上,使struct的大小變成12B。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章