c 物件模型分析(一)

2021-06-17 18:46:24 字數 1477 閱讀 6655

深夜睡不著覺,很痛苦。

關於物件

第一部分:

1.c++加上封裝之後的成本:

a.成員資料:c++ class中的成員資料等同於c中struct中的資料;

c.內聯的成員函式:擁有乙個或零個函式定義的內聯函式會在每個使用者身上產生乙個函式實體;

d.virtual function機制:支援乙個有效率的」執行期繫結「;(產生額外的負擔)

e.virtual base class:用以實現」多次出現在繼承體系中的base class,有乙個單一被共享的實體「;(產生額外的負擔)

f.derived class:基類與派生類之間的轉換會產生額外的負擔;(產生額外的負擔)

第二部分:c++物件模型

1.c++物件模型

a.在c++中有兩種class data members:static和nonstatic,三種class member functions:static,nonstatic,virtual。

b.c++物件模型結構:

nonstatic data members被配置在每乙個class object之內;

static data members則被存在所有class object之外;

static 和nonstatic function members也被放在所有class object之外;

每乙個class產生一堆指向virtual functions的指標,放於virtual table(vtbl)之中;

每個class object有乙個指標(vptr)指向相關的vtbl,vptr的設定和重置由每個class的constructor,destructor和copy assignment自動完成,

每個class所關聯的type_info object也有vtbl指出,通常放在vtbl的第乙個slot處;

c++中支援繼承,多重繼承,虛擬繼承,在虛擬繼承的情況下,base class不管唄派生多少次了,都只會存在乙份實體;

每乙個class object內部都含有乙個bptr指向base class table;

object vtbl第一位儲存class的type_info object,第二位指向虛函式位址,第三位開始指向其他虛函式;

第三部分:struct and class

1.c++中class 與struct的差異和使用方式和位置

a.隨便~

第四部分:object distinction

1.c++支援三種programming paradigms

a:包括程式模型,抽象資料型別模型,物件導向模型;

b.class object大小;

2.指標的型別

c 物件模型分析

class是一種特殊的struct 在記憶體中class依舊可以看作變數的集合 class與struct遵循相同的記憶體對齊規則 class中的成員函式與成員變數是分開存放的 每個物件有獨立的成員變數 所有物件共享類中的成員函式 執行時的物件退化為結構體的形式 所有成員變數在記憶體中依次排布 成員變...

C 物件模型分析(上)

回歸本質 class是一種特殊的struct 成員函式也是函式,只要時函式,編譯之後就是放在 段中的 值得思考的問題class a sizeof a class b sizeof b 物件記憶體布局初探 include include include include using namespace ...

C 物件模型(一)

在c 中,有兩種類成員變數 static 和 nonstatic 三種類成員函式 static nonstatic 和 virtual 如 class point 簡單物件模型 圖1 簡單物件模型 在這個模型中,乙個object是一些列的slots,每乙個slot指向乙個成員,成員按其宣告次序,各被...