我就從簡單的類到複雜的類逐次分析類的大小:
情形1:
class a{
情形2:
class a
int a;
void f();
class b{
int b;
類a和類b的大小事一樣的, 非虛函式儲存在**區中, 而沒有虛函式的虛函式數表指標需要儲存, 所以其大小都是4位元組;
情形3:
class a{
int a;
char b;
class b{
int b;
static char c;
sizeof(a) = 8;
sizeof(b) = 4;
因為靜態資料儲存在了全域性區;並不在類中;
情形4:
class a{
int a;
char b;
class b{
int b;
static char c;
class c: public a, public b
int d;
sizeof(a) = 8;
sizeof(b) = 4;
sizeof(c) = 16;
因為類c繼承了a和b , a在c中的大小是不變的;
情形5:
class a
int a;
virtual void f();
class b : public virtual a
class c: public virtual a
virtual void g();
class d:public virtual a
virtual void f();
virtual void h();
sizeof(a) = 8;
sizeof(b) = 12;
sizeof(c) = 16;
sizeof(d) = 12;
這是因為類a的大小為8, b虛繼承a,b 中多了乙個指向虛基類a的指標;
而c的大小是16, d的大小為12. 這是因為d中的函式f和a中的f導致了基類和派生類只需公用乙個虛函式表即可。
關於class 類大小的總結
namespace test class size class b class c public a,public b class d virtual public a class e virtual public a,virtual public b class f void test names...
class底層原理分析
class 類名 會把類構造出來 實際上是 元類例項化產生類 這個物件 類例項化產生物件,一定是 類名 person 類是由type例項化產生,傳一堆引數 type 呼叫類的 init 方法 type type object or name,bases,dict object or name 類的名...
struct和class的空間大小計算
struct和class的空間大小計算 總體上遵循兩個原則 1 整體空間是占用空間最大的成員所佔位元組的整數倍 但在 linux gcc 環境下,若最大的成員型別所佔位元組超過4,如 double是8 則整體空間是 4的倍數即可。2 資料對齊原則 記憶體按結構體成員的先後順序排列,當排到該成員變數時...