c 類的大小問題

2021-06-18 06:36:25 字數 778 閱讀 6336

先看一段**

#include #include #include #include struct a

;class x;};

class y: public x };

class b

;int main()

解釋: 第乙個sizeof(a)的大小是因為記憶體分配的效率問題, 所以都會以類裡面占用位元組最大的

基本型別 double 為標準劃分, 也就是最後大的的double 的整數倍, 又因為資料是按照在類裡面宣告的順序儲存的, 所以不夠的就當乙個double, 所以在a裡面a, f占用乙個double, t, g, g1, g3占用乙個double(即使不夠8位元組也得占用8位元組), 最後v和g4占用乙個double, 所以一供就是4個double = 40位元組

第二個sizeof(x) 的大小就不解釋了就是8

第三個sizeof(y) 這個大小不好理解, 由於是從x繼承過來的, 即使在y中宣告了乙個和x裡面變數相同的變數i, 那麼也只是將x繼承下來的i給隱藏了, 所以y裡面有兩個i(乙個x的, 乙個y的);同時y裡面還有乙個x 型的x變數, 這個x是占用8個位元組的; 綜上所述, y裡面的int i 和x裡面的double i 不是同乙個, 所以y裡面實際有int i, double i(被隱藏), x x 三個變數, 按照a 的大小規則, 就是三個double,那麼結果是24

第四個sizeof(b) 是由於編譯器為了區分物件的位址強制給空得類新增乙個位元組(要是空的就沒法開位址空間了, 也就沒辦法區分物件);

關於類的大小問題

一直以來在各個論壇上都不時的見過一些關於類大小的討論,尤其是當涉及到虛繼承時,類的大小就變得更加撲朔迷離,每看完乙個帖子都覺得自己有所收穫,但當下次遇到類似的帖子時卻怎麼也想不起自己以前對此問題的記憶了,於是乎,乾脆勤快些一勞永逸地把他們記錄下來。純屬個人理解,難免有錯,我會定期更新這篇文章,修改其...

c 空類所佔記憶體大小問題

先看乙個例子 include using namespace std class a class b class e class c public a class d public b,public c int main cout 為什麼會出現這種結果呢?首先要出需要多少記憶體表現乙個類說起 一般而...

結構體和類的大小問題

看這樣乙個筆試題 include using namespace std pragma pack 8 struct example1 struct example2 pragma pack int main int argc,char argv 問程式的輸出結果是什麼?答案是 8,16,4 stru...