關於內存對齊的說明

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 就知道內存怎麼對齊的了!!!!

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