類大小 sizeof 研究(虛繼承)

2021-06-17 22:12:15 字數 475 閱讀 5504

class top

//基類的虛表入口,4位元組

接著看left跟right都是16位元組。

本來除了top的8位元組,left裡只有int   y; 佔4位元組,還有4位元組佔在那裡?

由於是虛繼承,虛繼承的子類都要包含乙個指向基類的指標,從而實現動態聯編。

一次,要額外加4位元組的空間。所以一共是8+4+4=16位元組。

right同理。

再看bottom的大小為28位元組,這個是怎麼算的呢?

虛繼承是稜形繼承,基類大小為8位元組.

而bottom為普通多繼承,因此,bottom的大小應該是bottom部分+left部分+right部分+各自指向基類的指標+基類大小(虛繼承導致只有乙個基類例項)。

topleft       right

bottom

現在算算,基類8位元組+left4位元組+right4位元組+4位元組指向基類的指標*2+bottom4位元組=28位元組。

類的大小 sizeof 的研究

先看乙個空的類佔多少空間?class base 注意到我這裡顯示宣告了構造跟析構,但是sizeof base 的結果是1.因為乙個空類也要例項化,所謂類的例項化就是在記憶體中分配一塊位址,每個例項在記憶體中都有獨一無二的位址。同樣空類也會被例項化,所以編譯器會給空類隱含的新增乙個位元組,這樣空類例項...

類的大小 sizeof 的研究

先看乙個空的類佔多少空間?expand sourceview plaincopy to clipboardprint?class base class base private int a 佔4位元組 char p 4位元組指標 class derive public base derive pri...

含有虛函式的類sizeof大小

01 include 02 using namespace std 04 class base1 06 virtual void fun11 07 public 08 virtual base1 09 11 class base2 13 15 class derivedfromone public ...