C++對象內存結構

對簡單對象來說,內存結構佈局很簡單,遵循以下描述:

1、非靜態數據成員是影響對象所佔據內存大小的主要因素,隨着對象的增加而增加;

2、所有對象共享一份靜態數據成員,用sizeof計算對象大小時不會包含靜態數據成員佔據內存的大小;

3、靜態成員函數和非靜態成員函數不影響對象內存的大小;

4、如果對象中包含虛函數,會增加4字節的空間用來保存虛函數表指針。

 

對單繼承類,遵循如下描述:

在派生類實例頭部存在一個基類實例,虛函數表與基類公用一個。基類的內存佈局和簡單對象的內存佈局一樣,派生類內存佈局就是基類的內存佈局下面加上派生類自己添加的成員所構成的內存佈局,同時只是修改基類的虛函數表而不會新增虛函數表指針。對一個類來說,整個程序只有一個虛函數表,不管對象有多少。

 

對多重繼承基本上和單繼承一樣,只有一種例外,就是派生類派生自具有共同基類的兩個父類時會造成創建該派生類的父類的父類的兩個實例對象,解決方法就是採用虛繼承,虛繼承可以只產生一個同一父類實例。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章