exg1:
struct name1
{
char str; 佔用空間:2個字節
short x; 佔用空間:2個字節
int num; 佔用空間:4個字節
double xx; 佔用空間:8個字節
};
就拿這個來說 struct 的相對起始地址爲0x00000000,char是一字節,因此short本來應該的地址是0x00000001,但是由於字節對齊,因此short要在相對起始地址是2的倍數的位置,因此是在0x00000002的位置上了,然後char+short的地址是4字節,因此int的起始位置是0x00000004,很符合4的倍數,不用動,double
xx則正好符合8的倍數
exg2:
struct name2
{
char str; 佔用空間:4個字節
int num; 佔用空間:4個字節
short x; 佔用空間:8個字節
double xx; 佔用空間:8個字節
};
struct name2=24個字節 //加起來是18個字節,但是要是sizeof(double)的倍數,所以爲24。
exg3:
struct name1
{
char str; 偏移爲0 ,從第一個字節位置存儲,佔1個字節
short x; 偏移爲2 , 從第三個字節位置開始存儲,佔2個字節
int num; 偏移爲4, 由於前兩個佔了4個字節,所以從第五個字節開始存儲。佔4個字節
double xx; 偏移爲8,由於前兩個佔了8個字節,所以從第9個字節開始存儲。佔8個字節
};
一共佔16個字節。
轉載:http://blog.csdn.net/hbyh/article/details/2061471
exg5:
如果碰到結構體中有字符數組,例如:
struct para{
int iId;
char name[10];
char valuce[11];
}
它在內存中所佔的空間大小爲:4+10+11=25
注意:圖2(紅色的字圖片)中的int是按照2來計算的。
其實,看上面的第三個例子 exg3 就知道內存怎麼對齊的了!!!!