C++對象模型

在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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容