C 中虛函式繼承類的記憶體占用大小計算

2021-09-26 05:20:39 字數 584 閱讀 2532

位元組對齊的原理見鏈結注意64位系統虛函式指標佔8位元組,32位佔4位元組)

原帖中寫到「求sizeof(d)的時候,需要明白,首先vptr指向的虛函式表中儲存的是類d中的兩個虛函式的位址(只有乙個虛基類位址指標),然後存放基類c中的兩個資料成員ch1、ch2,注意記憶體對齊,然後存放資料成員d,這樣4+4+4=12。」32位系統虛函式表指標記憶體是4位元組,而64位系統虛函式表指標記憶體是8位元組。所以在64位系統中結果不同於32位系統,過程為8+2+4對齊為8+8+4(8+8是滿足父類的對齊要求)繼續對齊為8+8+8滿足(對齊為最大型別記憶體整數倍的對齊要求),故結果為24.

32位系統中求sizeof(e)的時候,首先是類b的虛函式位址,然後類b中的資料成員,再然後是類c的虛函式位址,然後類c中的資料成員,最後是類e中的資料成員e,同樣注意記憶體對齊,這樣4+4+4+4+4=20。

64位系統中求sizeof(e)的時候,首先是類b的虛函式位址(8位元組),然後類b中的資料成員(並對齊為8+8=16位元組),再然後是類c的虛函式位址(8位元組),然後類c中的資料成員(8+1+1對齊為8+8=16位元組),最後是類e中的資料成員e,同樣注意記憶體對齊(8位元組),這樣16+16+8=40。

C 中虛函式繼承類的記憶體占用大小計算

例子一 class a class b class c virtual void func1 class d public a,public c virtual void func1 class e public b,public c virtual void func1 int main void...

c 類大小(涵蓋繼承 虛繼承 虛函式表)

涉及到c 中求類大小時需要特別注意一下幾點 為類的非靜態成員資料的型別大小之和 有編譯器額外加入的成員變數的大小,用來支援語言的某些特性 如 指向虛函式的指標 虛繼承 多重繼承 為了優化訪問效率,進行的邊緣調整 與類中的建構函式,析構函式以及其他的成員函式無關 5.私有繼承,會去繼承之前的私有成員變...

含有虛函式,虛繼承的類的大小

當類中含有虛繼承時 在vs環境下,linux環境下有歧義 1.派生類物件中會新增乙個指標,該指標指向虛繼承的基類,稱為虛類指標 cptr 每乙個指標只指向其中乙個虛繼承的類,也就是說,虛繼承了幾個類,就會有幾個cptr。2.父類當中的成員變數 虛函式指標 vptr 虛類指標 cptr 仍然會被複製到...