//
聯絡人:
石虎暱稱
:嗡嘛呢叭咪哄
一、概念:
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 其一,只要涉及到虛基類...