類的大小 sizeof 的研究

2021-06-09 16:56:24 字數 1231 閱讀 1316

先看乙個空的類佔多少空間?

+ expand sourceview plaincopy to clipboardprint?

class base  

; class base

private:  

int a;                  //佔4位元組  

char *p;                 //4位元組指標  

};  

class derive:public base  

;       

~derive(){};  

private:  

static int st;         //非例項獨佔  

int d;                     //佔4位元組  

char *p;                    //4位元組指標  

};  

int main()   

;    

~derive(){};

private:

static int st;         //非例項獨佔

int d;                     //佔4位元組

char *p;                    //4位元組指標

int main()

;  

~derive(){};  

private:  

static int st;  

int d;  

char *p;  

char c;  

}; class derive:public base

;~derive(){};

private:

static int st;

int d;

char *p;

char c;

這個時候,結果就變成了

乙個char c;增加了4位元組,說明類的大小也遵守類似class位元組對齊,的補齊規則。

具體的可以看我那篇《5分鐘搞定位元組對齊》

至此,我們可以歸納以下幾個原則:

1.類的大小為類的非靜態成員資料的型別大小之和,也就是說靜態成員資料不作考慮。

2.普通成員函式與sizeof無關。

3.虛函式由於要維護在虛函式表,所以要佔據乙個指標大小,也就是4位元組。

4.類的總大小也遵守類似class位元組對齊的,調整規則。

類的大小 sizeof 的研究

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

類大小 sizeof 研究(虛繼承)

class top 基類的虛表入口,4位元組 接著看left跟right都是16位元組。本來除了top的8位元組,left裡只有int y 佔4位元組,還有4位元組佔在那裡?由於是虛繼承,虛繼承的子類都要包含乙個指向基類的指標,從而實現動態聯編。一次,要額外加4位元組的空間。所以一共是8 4 4 1...

sizeof 類 的大小

什麼是類的例項化,所謂類的例項化就是在記憶體中分配一塊位址 那我們先看看乙個例子 include class a class b class c public a class d public b,public c int main 程式執行的輸出結果為 sizeof a 1 sizeof b 1 ...