結構體中的成員可以是不同的數據類型,成員按照定義時的順序依次存儲在連續的內存空間。和數組不一樣的是,結構體的大小不是所有成員大小簡單的相加,需要考慮到系統在存儲結構體變量時的地址對齊問題。
首先需要知道偏移量的定義,結構體變量中成員的地址和結構體變量地址的差值。結構體大小等於最後一個成員的偏移量加上最後一個成員的大小。顯然,結構體變量中第一個成員的地址就是結構體變量的首地址,因此,第一個成員的偏移量爲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