在C++對象中:
- 數(shù)據(jù)成員:
- static
- nonstatic
- 函數(shù)成員:
- static
- nonstatic
- virtual
C++ 對象內(nèi)存布局
C++ 對象模型是從簡單對象模型派生而來,并對內(nèi)存空間和存取時間做了優(yōu)化。
- nonstatic data members 被配置于每一個class object之內(nèi),static data members 則被存放在個別的class。
- virtual function 以2個步驟支持:
- 每一個class產(chǎn)生出一堆指向virtual function的指針, 放在表格之中, 這個表格即為virtual table(vtbl)。
- 每一個class object安插一個指針,指向相關(guān)的virtual table,這個指針即為vptr。vptr的設(shè)定和重置都由每一個class的constructor,destructor,copy assignment運算符自動完成。
如圖所示:

3.jpg
C++ 類的內(nèi)存占用大小
- 空類
空類沒有任何數(shù)據(jù)成員,但實際情況是空類的內(nèi)存占用為1字節(jié)。因為如果對象不完全占用內(nèi)存空間,那么空類就無法取得 實例對象的地址,this指針失效,因此不能實例化。
但類的定義是由成員數(shù)據(jù)和成員函數(shù)組成,在沒有成員數(shù)據(jù)的情況下,還可以有成員函數(shù),仍然需要實例化。 - 數(shù)據(jù)成員開銷
- 內(nèi)存對齊
- 虛函數(shù)表的開銷
參考資料
1、《深度探索C++對象模型》 [美] Stanley B.Lippman