先看乙個空的類佔多少空間?
+ 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 ...