国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳細介紹c++中的類對象內(nèi)存模型

開發(fā) 后端
在C或C++中, 可以利用不同操作平臺下的內(nèi)存模型來編寫并發(fā)程序.本文詳細介紹了C++類對象的內(nèi)存模型,希望對你有幫助,一起來看。

內(nèi)存模型描述的是程序中各變量(實例域、靜態(tài)域和數(shù)組元素)之間的關(guān)系,以及在實際計算機系統(tǒng)中將變量存儲到內(nèi)存和從內(nèi)存取出變量這樣的低層細節(jié).不同平臺間的處理器架構(gòu)將直接影響內(nèi)存模型的結(jié)構(gòu).

首先介紹一下C++中有繼承關(guān)系的類對象內(nèi)存的布局:

在C++中,如果類中有虛函數(shù),那么它就會有一個虛函數(shù)表的指針__vfptr,在類對象最開始的內(nèi)存數(shù)據(jù)中。之后是類中的成員變量的內(nèi)存數(shù)據(jù)。

對于子類,最開始的內(nèi)存數(shù)據(jù)記錄著父類對象的拷貝(包括父類虛函數(shù)表指針和成員變量)。之后是子類自己的成員變量數(shù)據(jù)。

對于子類的子類,也是同樣的原理。但是無論繼承了多少個子類,對象中始終只有一個虛函數(shù)表指針。

虛函數(shù)表指針

為了探討C++類對象的內(nèi)存布局,先來寫幾個類和函數(shù)

首先寫一個基類:

  1. class Base   
  2. {   
  3. public:   
  4. virtual void f() { cout << "Base::f" << endl; }   
  5. virtual void g() { cout << "Base::g" << endl; }   
  6. virtual void h() { cout << "Base::h" << endl; }   
  7. int base;   
  8. protected:   
  9. private:   
  10. };  

然后,我們多種不同的繼承情況來研究子類的內(nèi)存對象結(jié)構(gòu)。

1. 無虛函數(shù)集繼承

  1. //子類1,無虛函數(shù)重載   
  2. class Child1 : public Base   
  3. {   
  4. public:   
  5. virtual void f1() { cout << "Child1::f1" << endl; }   
  6. virtual void g1() { cout << "Child1::g1" << endl; }   
  7. virtual void h1() { cout << "Child1::h1" << endl; }   
  8. int child1;   
  9. protected:   
  10. private:   
  11. };   

這個子類Child1沒有繼承任何一個基類的虛函數(shù),因此它的虛函數(shù)表如下圖:

Child1的虛函數(shù)表

我們可以看出,子類的虛函數(shù)表中,先存放基類的虛函數(shù),在存放子類自己的虛函數(shù)。

2. 有一個虛函數(shù)繼承

  1. //子類2,有1個虛函數(shù)重載   
  2. class Child2 : public Base   
  3. {   
  4. public:   
  5. virtual void f() { cout << "Child2::f" << endl; }   
  6. virtual void g2() { cout << "Child2::g2" << endl; }   
  7. virtual void h2() { cout << "Child2::h2" << endl; }   
  8. int child2;   
  9. protected:   
  10. private:   
  11. };  

Child2的虛函數(shù)表

當子類重載了父類的虛函數(shù),則編譯器會將子類虛函數(shù)表中對應的父類的虛函數(shù)替換成子類的函數(shù)。

3. 全部虛函數(shù)都繼承

  1. //子類3,全部虛函數(shù)重載   
  2. class Child3 : public Base   
  3. {   
  4. public:   
  5. virtual void f() { cout << "Child3::f" << endl; }   
  6. virtual void g() { cout << "Child3::g" << endl; }   
  7. virtual void h() { cout << "Child3::h" << endl; }   
  8. protected:   
  9. int x;   
  10. private:   
  11. };  

Child3的虛函數(shù)表

#p#

4. 多重繼承

多重繼承,即類有多個父類,這種情況下的子類的內(nèi)存結(jié)構(gòu)和單一繼承有所不同。

子類的內(nèi)存結(jié)構(gòu)

我們可以看到,當子類繼承了多個父類,那么子類的內(nèi)存結(jié)構(gòu)是這樣的:

子類的內(nèi)存中,順序

子類內(nèi)存的順序

5. 菱形繼承

菱形繼承


6. 單一虛擬繼承

單一虛擬繼承

虛擬繼承的子類的內(nèi)存結(jié)構(gòu),和普通繼承完全不同。虛擬繼承的子類,有單獨的虛函數(shù)表, 另外也單獨保存一份父類的虛函數(shù)表,兩部分之間用一個四個字節(jié)的0x00000000來作為分界。子類的內(nèi)存中,首先是自己的虛函數(shù)表,然后是子類的數(shù)據(jù)成員,然后是0x0,之后就是父類的虛函數(shù)表,之后是父類的數(shù)據(jù)成員。

如果子類沒有自己的虛函數(shù),那么子類就不會有虛函數(shù)表,但是子類數(shù)據(jù)和父類數(shù)據(jù)之間,還是需要0x0來間隔。
因此,在虛擬繼承中,子類和父類的數(shù)據(jù),是完全間隔的,先存放子類自己的虛函數(shù)表和數(shù)據(jù),中間以0x分界,最后保存父類的虛函數(shù)和數(shù)據(jù)。如果子類重載了父類的虛函數(shù),那么則將子類內(nèi)存中父類虛函數(shù)表的相應函數(shù)替換。

7. 菱形虛擬繼承

菱形虛擬繼承

結(jié)論:

(1) 對于基類,如果有虛函數(shù),那么先存放虛函數(shù)表指針,然后存放自己的數(shù)據(jù)成員;如果沒有虛函數(shù),那么直接存放數(shù)據(jù)成員。

(2) 對于單一繼承的類對象,先存放父類的數(shù)據(jù)拷貝(包括虛函數(shù)表指針),然后是本類的數(shù)據(jù)。

(3) 虛函數(shù)表中,先存放父類的虛函數(shù),再存放子類的虛函數(shù)

(4) 如果重載了父類的某些虛函數(shù),那么新的虛函數(shù)將虛函數(shù)表中父類的這些虛函數(shù)覆蓋。

(5) 對于多重繼承,先存放第一個父類的數(shù)據(jù)拷貝,在存放第二個父類的數(shù)據(jù)拷貝,一次類推,最后存放自己的數(shù)據(jù)成員。其中每一個父類拷貝都包含一個虛函數(shù)表指針。如果子類重載了某個父類的某個虛函數(shù),那么該將該父類虛函數(shù)表的函數(shù)覆蓋。另外,子類自己的虛函數(shù),存儲于第一個父類的虛函數(shù)表后邊部分。

(6) 當對象的虛函數(shù)被調(diào)用是,編譯器去查詢對象的虛函數(shù)表,找到該函數(shù),然后調(diào)用。

到這c++類對象的內(nèi)存模型就介紹完了,希望對大家有幫助。

【編輯推薦】

  1. 使用托管C++粘合C#和C++代碼(一)
  2. 談談C++中三個容易混淆的概念
  3. C/C++是程序員必須掌握的語言嗎?
  4. VC++獲得當前系統(tǒng)時間的幾種方案
  5. C++連接mysql數(shù)據(jù)庫的兩種方法
責任編輯:于鐵 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-01-18 17:48:46

C++類對象

2011-07-20 13:40:09

拷貝構(gòu)造函數(shù)

2011-07-20 15:58:53

C++引用

2010-01-19 18:51:17

C++類

2010-01-25 14:56:08

C++程序

2011-07-20 17:16:50

C++重載函數(shù)

2011-07-15 13:49:30

C++友元函數(shù)友元類

2011-07-13 16:49:59

C++

2010-03-24 12:45:00

Python 嵌入

2011-07-20 13:57:06

C++STL

2010-01-15 18:35:25

C++的類

2011-07-14 16:56:21

2011-07-14 23:27:05

C++引用

2011-07-14 16:26:01

2011-07-20 16:43:34

C++

2011-06-21 10:37:56

const

2011-07-20 16:48:22

C++static

2011-07-20 16:57:05

C++const

2011-07-20 16:50:39

inlinec++

2011-07-20 13:57:06

C++STL
點贊
收藏

51CTO技術(shù)棧公眾號

亚洲精品在线观看网站| 头脑特工队2免费完整版在线观看| 91精品久久久久久9s密挑| 国产日韩精品久久久| 一级黄色免费在线观看| 成人综合婷婷国产精品久久免费| 一级黄色片播放| 久久久久久97三级| 啊啊啊射了视频网站| 亚洲成人免费观看| 亚洲乱亚洲乱妇| 亚洲欧美日韩精品| 免费观看亚洲视频大全| 国产97在线视频| 在线亚洲欧美| 欧美黄色性生活| 欧美日韩国产一级二级| 欧美成人黑人| 欧美最猛性xxxxx亚洲精品| 亚洲精品乱码| 91精品无人成人www| 欧美三级电影网站| 国产精品高清一区二区| 国产超碰91| 久久这里都是精品| 中国日本在线视频中文字幕| 久久久精品国产亚洲| 黑人一区二区| 羞羞小视频视频| 国产成人精品网址| 精品国产电影一区| 成人三级小说| 668精品在线视频| 美女视频黄 久久| 蜜桃av成人| 欧美另类在线观看| 性8sex亚洲区入口| 色偷偷免费视频| 日韩在线资源网| 三级久久三级久久| 水莓100在线视频| 国产在线日韩| 日韩女同互慰一区二区| 亚洲福利视频一区二区| av电影在线播放高清免费观看| 国产亚洲亚洲国产一二区| 国产精品露脸自拍| 欧美激情一区二区| 中文字幕人成乱码在线观看| 欧美色图亚洲自拍| 欧美日韩精品中文字幕一区二区| 天使と恶魔の榨精在线播放| 成人在线观看亚洲| 国产色综合天天综合网 | 成人欧美一区二区三区在线湿哒哒| 欧美美女一区二区| 亚洲免费一区| 91精品91久久久中77777老牛| 在线观看日韩视频| 99视频一区二区| 国产女主播在线观看| 亚洲精品一区二区三区婷婷月| 国产精品人人爽人人做我的可爱| 免费在线黄色网址| 精品国产一二| 亚洲精品aⅴ中文字幕乱码| 久草精品在线观看| 国产美女视频一区二区| 青青青在线播放| 国产精品999999| 欧美三级欧美一级| 国产伦精品一区二区三区免费| 素人啪啪色综合| 国产特级毛片| 日韩黄色影视| 欧美激情在线狂野欧美精品| 欧美日韩亚洲视频一区| 国产成人1区| 搡女人真爽免费午夜网站| 亚洲欧美www| 久久撸在线视频| 国产99久久久欧美黑人| 欧美另类高清zo欧美| 国产精品影视网| 日韩成人a**站| 18videosex性欧美麻豆| 97在线免费视频观看| 欧洲成人性视频| 亚洲国产高清福利视频| 国产精品黄色在线观看| 亚洲深爱激情| 欧美伦理在线视频| 日韩不卡在线| 日本黄色片在线观看| 成人网18免费网站在线| www.-级毛片线天内射视视| 韩国三级电影久久久久久| 欧美一卡二卡三卡| 亚洲va天堂va国产va久| 91热门视频在线观看| 蜜臀av一区二区在线免费观看| 亚洲综合福利| 一区二区三区国产好| 欧美18av| 日韩三级电影视频| 久久久久久久影视| 米奇.777.com| 91制片厂毛片| 97公开免费视频| 欧美国产视频一区| 亚洲电影一区二区三区| 欧美aaaaaaaaaaaa| 天堂网av成人| 成人偷拍自拍| 林ゆな中文字幕一区二区| 污污视频网站免费观看| 成人午夜在线视频一区| 91精品国产91久久久久| 欧美激情videoshd| 欧美多人爱爱视频网站| 久久手机免费视频| 久久精品一偷一偷国产| 欧美日韩国产999| 欧美男插女视频| 久久精品视频在线| 欧美激情亚洲激情| 欧美在线激情网| 成人免费视频网| 久久久久久久有限公司| 色视频一区二区三区| 妞干网在线播放| 天天操天天爽天天射| 国产小视频国产精品| 一区二区三区日韩在线观看| 久久亚洲精品小早川怜子| 国产视频911| 欧美日韩另类字幕中文| 欧美日韩色综合| 欧美特黄不卡| 成人影院在线视频| 久久精品资源| 亚洲理论电影片| 欧美日韩一区二区国产| 久久99国产精品尤物| 国产精品免费丝袜| 欧美一卡在线观看| 久久久国产精品视频| 成人h动漫精品一区二区器材| 国产福利资源一区| 免费在线观看视频一区| 久久久精品黄色| 精品视频免费在线| 欧美精品福利视频| 日本不卡一区二区三区视频| 国产福利一区视频| 成年人在线观看网站| 亚洲三级av| 久久国产人妖系列| 一区二区三区日韩| 亚洲午夜性刺激影院| 国产伦精品一区二区三区四区视频| 男女曰b免费视频| 91网在线看| 久久激情电影| 国产精品久久久久久久久免费丝袜 | 在线亚洲一区二区| 91极品女神在线| r级无码视频在线观看| 五月花成人网| 久久伊人久久| 91在线小视频| 精品成人一区二区三区| 精品欧美一区二区在线观看视频 | 91精品国产成人观看| 91尤物视频在线观看| 亚洲国产天堂久久综合网| 中文无字幕一区二区三区| 久久精品亚洲乱码伦伦中文| 中文字幕日韩高清| www.男人天堂网| а√天堂中文资源在线bt| 免费视频久久| 亚洲国产成人精品女人久久久 | 国产区二区三区| 国产亚洲精品美女久久| 亚洲欧美日韩中文播放| 久久久久久18| 羞羞视频立即看| 欧美在线影院| 欧美一级夜夜爽| 欧美国产视频在线观看| 国产在线观看免费麻豆| 国产呦萝稀缺另类资源| www日韩欧美| 亚洲综合婷婷久久| 欧美综合一区| 国产亚洲美女久久| 麻豆影视在线观看| 理论电影国产精品| 欧美成人免费一级人片100|