C 物件模型初探

2021-08-01 22:53:28 字數 648 閱讀 6251

最近看了侯捷的《深度探索c++物件模型》,對c++的物件機制有了初步的了解。博主結合書上講的,和自己的理解簡單總結一下。

class point
對於類裡面的虛函式,c++物件模型以下面兩個方面加以支援:

1. 每乙個class產生一堆指向virtual functions的指標,放著virtual table中,即常說的虛表(vtbl).

2. 每乙個類物件中安插了乙個指向相關virtual table的指標,這個指標被稱為vptr.

就以上這個point類的物件來說,它的size是多大呢??

一般而言:

- 其nonstatic data members的總和大小。(非靜態資料成員)

- 加上任何由於alignment的需求而填補上去的空間,以使bus的運輸量達到最高效率。(博主覺得這個和結構體內的資料型別對齊差不多,歡迎指正)

- 加上為了支援virtual而產生的任何額外負擔等。(例如vptr—指向虛表的指標)

所以point類的大小應該為非靜態資料成員float _x(4位元組)和指向虛表的vptr的大小之和。(vptr的大小由32(4位元組)/64(8位元組)位作業系統決定)

C 物件模型初探

在c 中有兩種class data members static和non static,以及三種class member functions static non static 和virtual。簡單物件模型 乙個object由一系列的slots組成,每乙個slot指向乙個member,slots按...

C 物件模型初探

測試環境 windows7 32 位機器上 vs2010 c 中的class從物件導向理論出發,將變數 屬性 和函式 方法 集中定義在一起,用於描述現實世界中的類。然而從計算機的角度,程式依然由資料段和 段構成。c 編譯器如何完成物件導向理論到電腦程式的轉化?換句話 c 編譯器是如何管理類 物件 類...

C 物件導向模型初探

前言 c 物件模型可以概括為以下2部分 1.語言中直接支援物件導向程式設計的部分,主要涉及如建構函式 析構函式 虛函式 繼承 單繼承 多繼承 虛繼承 多型等等。2.對於各種支援的底層實現機制。在c語言中,資料 和 處理資料的操作 函式 是分開來宣告的,也就是說,語言本身並沒有支援 資料和函式 之間的...