C 物件模型

2021-06-26 12:58:20 字數 992 閱讀 5663

一、c++簡單物件模型

乙個ojbect是一系列的slots,每個slots指向乙個members(data member or function member)

members都不放在objects之中,objects中有的只是一系列member的指標而已

-------------------簡單物件模型中的索引思想引申出兩指向成員的指標(pionter-to-member)這種設計。

二、**驅動物件模型

object 本身含有兩個分別指向 data member table和member function table的指標。member fucntion table是一系列的slots,而data member table 則直接含有data本身。

---------------------**驅動物件模型的member function table思想引申出了virtual functions 的處理方案(虛函式表)

三、c++物件模型

1.nonstatic data member 放在 object 之內,static data member  放在object之外。

2.function members都放在object之外

3.object 產生一堆指向virtual functions的指標,形成virtual table(虛函式表),並有乙個指標vptr指向這個表

簡單物件模型對多繼承處理方式:

在簡單物件模型中派生類會有乙個slot指向基類,優點是基類變化時,不會影響派生類的大小,缺點是間接性導致的空間和訪問時間上的負擔(要通過指標到基類中去訪問)

在這種基礎上,為了處理多繼承,可以設計乙個base class table,在派生類中,有乙個指標指向這個表,這樣,基類的大小和個數的變化就不會對派生類產生影響了。

c和c++的記憶體布局問題:

以前在做資料報解析的時候就曾經將長度不定的資料塊定義在結構體最後,接受到資料後,根據資料長度算出整個幀的大小,再將收到的資料放入結構體的資料塊內,如此再來進行後續解析,

c 物件模型

很久之前就想總結一下c 的記憶體使用機制。直到現在剛考完試之制,去實習之前,才有時間完成這事。1.程式使用記憶體區 乙個程式占用的記憶體區一般分為5種 1 全域性 靜態資料區 儲存全域性變數及靜態變數 包括全域性靜態變數和區域性靜態變數 2 常量資料區 儲存程式中的常量字串等。3 區 儲存程式的 4...

C 物件模型

很久之前就想總結一下c 的記憶體使用機制。直到現在剛考完試之制,去實習之前,才有時間完成這事。1.程式使用記憶體區 乙個程式占用的記憶體區一般分為5種 1 全域性 靜態資料區 儲存全域性變數及靜態變數 包括全域性靜態變數和區域性靜態變數 2 常量資料區 儲存程式中的常量字串等。3 區 儲存程式的 4...

C 物件模型

簡單物件模型 乙個c 物件儲存了所有指向成員的指標,而成員本身不儲存在物件中。也就是說不論資料成員還是成員函式,也不論這個是普通成員函式還是虛函式,它們都儲存在物件本身之外,同時物件儲存指向它們的指標。示意圖如右。簡單物件模型對於編譯器來說雖然極盡簡單,但同時付出的代價是空間和執行期的效率.顯而易見...