C 物件模型 記憶體布局

2021-08-15 17:41:39 字數 952 閱讀 8905

//

聯絡人:

石虎暱稱

:嗡嘛呢叭咪哄

一、概念:

1

.沒有繼承情況,vptr存放在物件的開始位置,以下是base1的記憶體布局

m_idata :100

2.單繼承的情況下,物件只有乙個vptr,它存放在物件的開始位置,派生類子物件在父類子物件的最後面,以下是d1的記憶體布局

b1:: m_idata : 100

b1::vptr :     4294800

b2::vptr :     4294776

d::m_idata :   300

4. 虛擬繼承情況下,虛父類子物件會放在派生類子物件之後,派生類子物件的第乙個位置存放著乙個vptr,虛擬子類子物件也會儲存乙個vptr,以下是vd1的記憶體布局

unknown :   4294888

b1::vptr :   4294864

vd1::vptr :   4294944

vd1::m_idata : 200

vd2::unknown :  4294952

vd::m_idata :    5

00b1::m_idata :     100

5. 稜形繼承的情況下,非虛基類子物件在派生類子物件前面,並按照宣告順序排列,虛基類子物件在派生類子物件後面

vd1::unknown : 4294968

vd2::vptr :    4

294932

vd2::m_idata : 3

00b1::vptr :     4294920

b1::m_idata :  100

謝謝!!!

C 物件模型之記憶體布局

c 虛函式表解析 虛函式按照其宣告順序放於表中 父類的虛函式在子類的虛函式前面 覆蓋的函式被放到了虛表中原來父類虛函式的位置 沒有被覆蓋的函式依舊 每個父類都有自己的虛表 子類的成員函式被放到了第乙個父類的表中 所謂的第乙個父類是按照宣告順序來判斷的 待補充 c 物件模型之記憶體布局 1 c 物件模...

C 物件模型之記憶體布局(2)

多重繼承 繼承關係大於2,至少有父類,子類,孫子類三代關係。使用vs2017檢視物件記憶體布局如下 class c size 20 0 base class b 0 base class a 0 4 a1 8 a2 12 b1 16 c1 c vftable c meta 0 0 c a1 1 a ...

C 物件記憶體布局

好文要記下來 上 下 玄機逸士系列 補充一點,兩個博文裡面都沒有給出虛基類表中的第一項的解釋,其實第一項就是vbptr到自己類物件位址的偏移量。若沒有虛函式,也就是沒有vfptr,偏移量為0,若有,就為 4 vfptr 在 vbptr之前,所以是 4 玄機逸士的結論 vc 6 其一,只要涉及到虛基類...