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。