C 中物件的記憶體模型

2021-07-31 02:01:05 字數 871 閱讀 6931

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,在類物件最開始的記憶體資料中。之後是類中的成員變數的記憶體資料。對於子類,最開始的記憶體資料記錄著父類物件的拷貝 包括父類虛函式表指標和成員變數 之後是子類...