派生類的記憶體大小(sizeof)舉例

2021-08-25 22:38:36 字數 579 閱讀 2412

#include using namespace std;

class a

};class b

};class c : public a, public b

};int main()

ubuntu 16.04,g++ 5.4.0

16
最底層的派生類,如果有直接基類,則不含虛函式表指標(vptr),其中的虛函式更新或新增到其基類中。如果沒有直接基類,則本類中建立虛函式表指標。

上述例子中,a的虛函式表為a::func1(),d::func3(),b中虛函式表為b::func2();

在vs中的記憶體布局比較簡單,虛繼承會有虛基類表和虛基類表指標(vbptr)。

猜測和初步驗證,歡迎批評指正。

#include using namespace std;

class a

};class b : public a

};class c : public b

};int main()

在vs和linux中均為8;

類記憶體大小分析

include using namespace std class test int main 這是因為空類也可以被例項化,但是例項化的物件必須要有記憶體位址,所以空類會被加入乙個位元組,用來得到例項化的記憶體位址。include using namespace std class test int...

類的占用記憶體大小

1.類的大小為類的非靜態成員資料的型別大小之和,也 就是說靜態成員資料不作考慮。2.普通成員函式與sizeof無關。3.靜態成員並不屬於某個物件,sizeof取的是物件大小。4.虛函式由於要維護在虛函式表,所以要佔據乙個指標大小,也就是4位元組。5.空類的sizeof為1。因為乙個空類也要例項化,所...

基類和派生類記憶體詳解

昨天室友問了我乙個c 基類和派生類的記憶體方面的問題,由於當時不能給出確切的答案,所以今天在vs上面乙個個測試了一遍,今記錄下來。問題歸結為如下 class a public a a 0 cout b b a p b p fun p vfun p a 2 通過p改變a中a的值 couta a的值 基...