class的大小分析

2021-06-23 09:02:38 字數 1094 閱讀 5408

我就從簡單的類到複雜的類逐次分析類的大小:

情形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 資料對齊原則 記憶體按結構體成員的先後順序排列,當排到該成員變數時...