C 物件模型總結

2022-07-28 14:18:23 字數 1112 閱讀 5594

在只有虛函式,或者只有虛繼承的情況下,各個編譯器中對c++的記憶體模型的實現是一樣的。但同時存在虛函式和虛繼承時,gcc與vc就會有差別。

class base//4;

class base1 :public base//8;

class base2 : public base//8;

class base3//4};

//兩個虛繼承分別使用兩個指標指向自己的虛基類,然後兩個基類有2個int

//應為使用了共同的虛基類,base的int只有乙個,因此2*4+4+4+4=20

//有多個虛繼承的時候,就有多個虛指標

class derve:public

virtual base1,virtual base2//20;

//base1有2個a,base2有兩個a,就是基類的a有兩份

class derve0:public base1, base2//

16 base1有2個a,base2有兩個a,

;class derve1:public derve//20;

class derve2:public derve//24;

//gcc當中 虛基類指標也會併入虛表中,vc不會,所有vc是24

class derve3:public derve//

24 -- 20

};//

多個虛繼承共用乙個虛表,乙個虛指標

class derve4:public base3//4};

////gcc當中 虛基類指標也會併入虛表中,所以只有乙個虛指標,vc是12

class derve5:virtual

public base3//

12 -- 8

;class derve6:public derve3//

24,vc28

inta;

};

總結:1、多個虛函式共用乙個虛表

2、多個虛繼承會建立多個虛表,因此會有多個虛指標

3、在gcc中,如果同時有虛繼承和虛函式,則指向虛基類的指標也會放在虛表中,就是每個虛繼承只有乙個虛指標;但多個虛繼承仍然會有多個虛指標。

4、在vc中,虛函式指標與虛基類指標不會合併,同時存在。如derve3例子

RDS物件模型總結

rds 物件模型總結 物件說明 rds.dataspace該物件只包含獲得伺服器 的方法。可以是預設或自定義的伺服器程式 業務物件 在internet intranet 區域網或本地動態連線庫上均可呼叫伺服器程式。rdsserver.datafactory該物件表示預設的伺服器程式。它執行預設的 r...

文件物件模型總結

宿主物件 dom物件 bom物件 dom,全稱document object model文件物件模型 js中通過dom來對html文件進行操作。只要理解了dom就可以隨心所欲的 操作web頁面 文件 文件表示的就是整個的html網頁文件 物件 物件表示將網頁中的每乙個部分都轉換為了乙個物件 模型 使...

c 物件模型

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