1
、在不涉及虛函式的情況下,乙個物件所占用的空間,和乙個有相同欄位的結構體所占用的空間相同,不會有關於方法的內容。 2
、物件的方法同樣是放在**段的,在程式的入口處有乙個方法向量表,實際上就是一系列
jmp函式入口的語句,每乙個就表示乙個函式。
具體內容,我們可以檢視一下下面的反彙編**:
tc->show();
// tc
是乙個testclass
的物件指標
00dc2d83 mov ecx,dword ptr [tc]
00dc2d86 call testclass::show (0dc12bch)
函式向量表:
testclass::~testclass:
00dc1253 jmp testclass::~testclass (0dc6740h)
operator delete:
00dc12b2 jmp operator delete (0dc40a0h)
_heapfree@12:
00dc12b7 jmp _heapfree@12 (0dc9450h)
testclass::show:
00dc12bcjmp testclass::show (
0dc6800h)
void testclass::show(void)
// show
方法的真正入口
可見,物件在記憶體中儲存時,資料和方法是分開儲存的,只不過在編譯器的控制下,可以準確呼叫。
c 類物件的記憶體模型
c 類物件記憶體結構 首先介紹一下c 中有繼承關係的類物件記憶體的布局 在c 中,如果類中有虛函式,那麼它就會有乙個虛函式表的指標 vfptr,在類物件最開始的記憶體資料中。之後是類中的成員變數的記憶體資料。對於子類,最開始的記憶體資料記錄著父類物件的拷貝 包括父類虛函式表指標和成員變數 之後是子類...
c 類物件的記憶體模型
c 類物件記憶體結構 首先介紹一下c 中有繼承關係的類物件記憶體的布局 在c 中,如果類中有虛函式,那麼它就會有乙個虛函式表的指標 vfptr,在類物件最開始的記憶體資料中。之後是類中的成員變數的記憶體資料。對於子類,最開始的記憶體資料記錄著父類物件的拷貝 包括父類虛函式表指標和成員變數 之後是子類...
c 類物件的記憶體模型
c 類物件記憶體結構 首先介紹一下c 中有繼承關係的類物件記憶體的布局 在c 中,如果類中有虛函式,那麼它就會有乙個虛函式表的指標 vfptr,在類物件最開始的記憶體資料中。之後是類中的成員變數的記憶體資料。對於子類,最開始的記憶體資料記錄著父類物件的拷貝 包括父類虛函式表指標和成員變數 之後是子類...