C 類裡面,函式占用儲存空間問題

2021-06-20 15:08:02 字數 682 閱讀 5386

先看兩段**:

**段1:

class a;

class1

物件例項

vptr

m_data1

m_data2

通過vptr指標找到虛函式表

vtable(虛函式表)

(*vfunc1)()

(*vfunc2)()

(*vfunc3)()

class1::vfunc1()

class1::vfunc2()

class1::vfunc3()

所以回到原來的問題,a中只有乙個或者幾個虛函式的話,沒有成員變數,那麼類a相當於含有乙個vptr指向虛函式表的指標,所以sizeof(a)=4。

還有一點,如

class b ;

class b2 ;

class c:public b ;

class d:public virtual b ;

class e:public b,public b2 ;

sizeof(b) = 1;   sizeof(b2) = 1;  sizeof(c) = 1;  sizeof(d) = 4;  sizeof(e) = 1;

空類所佔空間為一(上文以解釋),單一繼承的空類空間也是1,多重繼承的空類空間還是1,但是虛繼承涉及到虛表(虛指標),所以sizeof(d)=4。

C 類占用空間計算方式

1 乙個類占用的空間主要是屬性占用空間,而成員函式一般不占用空間,但是虛函式占用空間,需要說明的是,無論多少個虛函式,只要占用4個位元組即可,也就是索引指向乙個虛擬表的首位置。另外需要說明的是占用空間都考慮了對齊,所以不足4個的按照滿4個的算。2 類的繼承,子類占用空間是父類基礎上增加本類空間即可。...

C 類占用空間計算方式

1 乙個類占用的空間主要是屬性占用空間,而成員函式一般不占用空間,但是虛函式占用空間,需要說明的是,無論多少個虛函式,只要占用4個位元組即可,也就是索引指向乙個虛擬表的首位置。另外需要說明的是占用空間都考慮了對齊,所以不足4個的按照滿4個的算。2 類的繼承,子類占用空間是父類基礎上增加本類空間即可。...

C 類的儲存空間和空間大小的問題

lightnut 找本書看 inside c object model 深入探索c 物件模型 liehen8475 普通成員函式不分配空間,可以把他當作是庫函式使用,因為它是靜態繫結的。但是當類中定義了虛函式,要有4個位元組 多個虛函式也是4個位元組 的指標指向虛函式表。剩下的成員定義順序分配並按 ...