結構體大小的計算

結構體中的成員可以是不同的數據類型,成員按照定義時的順序依次存儲在連續的內存空間。和數組不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在存儲結構體變量時的地址對齊問題。

首先需要知道偏移量的定義,結構體變量中成員的地址和結構體變量地址的差值。結構體大小等於最後一個成員的偏移量加上最後一個成員的大小。顯然,結構體變量中第一個成員的地址就是結構體變量的首地址,因此,第一個成員的偏移量爲0。

struct A{
    char a;
};
sizeof(A) 大小是1;計算方法0(偏移量)+1(變量的大小);

struct A{
    char a;
    int b;
};
sizeof(A) = 8;

變量 偏移量 變量大小
a    0       1
b    1+3     4

struct A{
    char a;
    int b;
    virtual fun(){}
};
sizeof(A) = 12

變量 偏移量 變量大小
vfptr 0      4
a    4       1
b    5+3     4


struct A{
    char a;
    int b;
    void function(){}
};
sizeof(A) = 8;

變量 偏移量 變量大小
a    0       1
b    1+3     4

 

 

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