先看兩段**:
**段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個位元組 的指標指向虛函式表。剩下的成員定義順序分配並按 ...