在只有虛函式,或者只有虛繼承的情況下,各個編譯器中對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...