亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

深入理解C++的對象模型

2020-05-23 14:01:07
字體:
來源:轉載
供稿:網友

何為C++對象模型?

C++對象模型可以概括為以下2部分:

     1. 語言中直接支持面向對象程序設計的部分

     2. 對于各種支持的底層實現機制

引言

現在有一個Point類,聲明如下:

class Point { public: Point(float xval); virtual ~Point(); float x() const; static int PointCount(); protected: virtual ostream& print(ostream &os) const; float _x; static int _point_count;};

這個類在機器上是通過什么模型來表示的呢?下面就介紹三種不同的實現方式。

1. 簡單對象模型

簡單對象模型名副其實,十分簡單。在簡單對象模型中,一個 object是由一系列slots組成,每個slot相當于一個指針,指向一個member,memebers按照聲明的順序與slots一一對應,這里的members括data membersfunction members。

如果將簡單對象模型應用在Point Class上,結構圖如下:

深入c,對象模型,深入理解c,深入探索c

優點:十分簡單,降低了編譯器設計的復雜度。

缺點:空間和時間上的效率降低。由于所有member都對應一個slot指針,所以每個object在空間上額外多出:member's number 乘以指針大小的空間。同時由于訪問object的每個member都需要一次slot的額外索引,所以在時間的效率也會降低。

2. 表格驅動對象模型

表格驅動對象模型將member datamember function分別映射成兩個表格member data tablefunction member table,而object本身只存儲指向這兩個表格的指針。 其中function member table是由一系列的slot組成,每個slot指向一個member function; member data table則直接存儲的member data本身。如果將表格驅動對象模型應用在Point Class上,結構圖如下:

深入c,對象模型,深入理解c,深入探索c

優點:采用兩層索引機制,對object變化提供比較好的彈性,在objectnonstatic data member有所改變時,而應用程序代碼沒有改變,這時是不需要重新編譯的。

缺點:空間和時間上的效率降低,具體原因可以參考簡單對象模型的缺點分析。

3. C++ 對象模型

Stroustrup 早期設計的C++對象模型是從簡單對象模型改進而來的,并對內存空間和存取時間進行了優化。主要是將nonstatic data members存儲在每一個object中,而static data members以及所有的function members被獨立存儲在所有object之外。

對虛函數的支持主要通過以下幾點完成的:

     所有包含虛函數或者繼承自有虛函數基類的class都會有一個virtual table,該虛函數表存儲著一堆指向該類所包含的虛函數的指針。

     每個class所關聯的type_info object也是由virtual table存儲的,一般會存在該表格的首個slot,type_info用于支持runtime type identification (RTTI)。

如果將C++對象模型應用在Point Class上,結構圖如下:

深入c,對象模型,深入理解c,深入探索c

優點:空間和存取效率高,所有static data members以及所有的function members被獨立存儲在所有object之外,可以減少每個object的大小,而nonstatic data members存儲在每一個object中,又提升了存取效率。

缺點:如果應用程序的代碼未曾更改,但所用到的classnonstatic data members有所更改,那么那些代碼仍然需要全部重新編譯,而前面的表格驅動模型在這方面提供了較大的彈性,因為他多提供了一層間接性,當然是付出了時間和空間上的代價。

在加上繼承情況下的對象模型

C++支持單繼承、多繼承、虛繼承,下面來看下base class實體在derived class中是如何被構建的。

簡單對象模型中可以通過derived class object中的一個slot來存儲base class subobject的地址,這樣就可以通過該slot來訪問base class的成員。這種實現方式的主要缺點是:因為間接性的存儲而導致空間和存取時間上存在額外負擔;優點是:derived class的結構不會因為base class的改變而改變。

表格驅動對象模型中可以利用一個類似base class table的表格來存儲所有基類的信息。該表格中存儲一系列slot,每個slot存儲一個base class的地址。這種實現方式的缺點是:因為間接性的存儲而導致空間和存取時間上存在額外負擔;優點是:一是所有繼承的class都有一致的表現形式(包含一個base table指針,指向基類表)與基類的大小和數目沒有關系,二是base class table增加了子類的擴展性,當基類發生改變時,可以通過擴展、縮小或者更改base class table來進行調整。

以上兩種實現方式都存在一個重要的問題,就是由于間接性而導致的空間和時間上的額外負擔,并且該間接性的級數會隨著繼承的深度而增加。

C++ 最初采用的繼承模型并不采用任何間接性,所有基類的數據直接存儲在子類當中,這樣在存儲結構和訪問效率上是最高效的。當然也有缺點:當base class members有任何改變,用到此base class或者derived class的對象必須重新編譯。在C++ 2.0引入了virtual base class,需要一些間接性的方式來支持該特性,一般會導入一個virtual base class table或者擴展已有的virtual table。

總結

以上就是深入研究C++的對象模型的全部內容,希望本文的內容對大家有所幫助。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩av免费网站| 欧美极品少妇与黑人| 成人一区二区电影| 美女福利视频一区| 91久久中文字幕| 91欧美精品午夜性色福利在线| 欧美日韩亚洲网| 欧美成人精品不卡视频在线观看| 国产精品美女呻吟| 国产精品免费福利| 国产精品午夜国产小视频| 亚洲xxxx3d| 国产成人91久久精品| 欧美与黑人午夜性猛交久久久| 亚洲风情亚aⅴ在线发布| 国产精品欧美在线| 欧洲午夜精品久久久| 成人激情黄色网| 久久久久久久久久久av| 国产女人18毛片水18精品| 一本色道久久综合狠狠躁篇的优点| 国产在线视频2019最新视频| 久久亚洲精品网站| 日韩av黄色在线观看| 久久影视电视剧免费网站清宫辞电视| 欧美成人免费在线观看| 国自在线精品视频| 国产日韩av高清| 久久久免费在线观看| 国产精品美女久久久久久免费| 成年人精品视频| 亚洲精品www久久久久久广东| 日韩中文字幕不卡视频| 日韩美女中文字幕| 这里只有精品在线观看| 一区二区三区国产视频| 亚洲精品久久久久中文字幕二区| 伊人亚洲福利一区二区三区| 亚洲精品xxx| 国产精品丝袜高跟| 亚洲a区在线视频| 狠狠干狠狠久久| 97香蕉久久夜色精品国产| 久久久久久久久久国产精品| 亚洲午夜小视频| 国产精品海角社区在线观看| 在线看欧美日韩| 久久久久久尹人网香蕉| 91色琪琪电影亚洲精品久久| 国产成+人+综合+亚洲欧洲| 国产91精品视频在线观看| 日韩欧美一区二区三区| 国产一区二区丝袜高跟鞋图片| 久久人人爽人人| 日韩亚洲欧美中文高清在线| 最新国产精品拍自在线播放| 在线视频日本亚洲性| 国产精品亚洲综合天堂夜夜| 欧美激情精品久久久久久大尺度| 国产精品天天狠天天看| 国模精品视频一区二区| 成人免费网站在线观看| 亚洲专区在线视频| 久久综合免费视频影院| 亚洲四色影视在线观看| 欧美极品美女电影一区| 日本亚洲欧洲色| 国产精品大陆在线观看| 欧美激情在线有限公司| 欧美电影免费观看| 国产成人一区三区| 欧美日韩中文在线观看| 在线日韩精品视频| 久色乳综合思思在线视频| 欧美另类99xxxxx| 26uuu亚洲伊人春色| 国产精品欧美久久久| 欧美怡春院一区二区三区| 欧美日韩在线看| 青青久久av北条麻妃海外网| 亚洲a在线播放| 国产精品成人免费视频| 久久99久久久久久久噜噜| 国产精品劲爆视频| 97在线视频免费播放| 亚洲娇小xxxx欧美娇小| 精品国产精品自拍| 欧美另类极品videosbest最新版本| 热99精品只有里视频精品| 国产欧美日韩免费看aⅴ视频| 亚洲天堂av在线免费| 欧美日韩精品中文字幕| 国产精品91免费在线| 亚洲v日韩v综合v精品v| 深夜福利国产精品| 国产一区二区动漫| 亚洲无av在线中文字幕| 欧美电影免费观看高清| 日韩h在线观看| 国产精品草莓在线免费观看| 国内精品久久久久久影视8| 91色精品视频在线| 国产香蕉一区二区三区在线视频| 亚洲偷欧美偷国内偷| 91精品国产精品| 在线播放精品一区二区三区| 亚洲免费高清视频| 亚洲欧美中文在线视频| 欧美香蕉大胸在线视频观看| 九九精品在线视频| 97超碰色婷婷| 亚洲专区国产精品| 欧美日韩精品国产| 日韩av大片在线| 久热精品在线视频| 成人xxxxx| 7777精品久久久久久| 欧美国产日韩xxxxx| 久久精品人人做人人爽| 亚洲国产一区二区三区四区| 国产精品91在线观看| 韩国视频理论视频久久| 国产成人a亚洲精品| 色偷偷av一区二区三区乱| 亚洲精品视频中文字幕| 国产精品久久久久免费a∨大胸| 国产成人精彩在线视频九色| 91亚洲精品在线观看| 中文字幕亚洲在线| 55夜色66夜色国产精品视频| 91视频免费网站| 国产精品一区二区久久| 在线观看亚洲视频| 国产精品国语对白| 久久久人成影片一区二区三区观看| 国内精品模特av私拍在线观看| 国产一区二中文字幕在线看| 久久久噜噜噜久噜久久| 欧美一区深夜视频| 久久久久久久久久久国产| 国产精品一久久香蕉国产线看观看| 日韩欧美a级成人黄色| 亚洲精品日产aⅴ| 国产精品mp4| 国产成人精品久久| 91精品国产综合久久男男| 最新69国产成人精品视频免费| 538国产精品视频一区二区| 91久久久久久久| 亚洲第一页在线| 久久久中文字幕| 国产精品h在线观看| 成人www视频在线观看| 91av视频在线免费观看| 欧美体内谢she精2性欧美| 国产精品亚洲欧美导航| 亚洲自拍另类欧美丝袜| 久久在线观看视频| 日本欧美一二三区| 色爱av美腿丝袜综合粉嫩av| 成人伊人精品色xxxx视频| 亚洲精品美女久久久久| 好吊成人免视频| 91精品国产91久久久久久最新|