先看程式再分析:
#include using namespace std;
class a
virtual void set(int a)
virtual ~a(){}
};class b
;struct c
;void main()
{ cout<
分析如下:
類所佔的空間 = 類成員變數所佔空間 + 4(如果存在虛函式的話);
注意:1、類成員所佔的空間可能會涉及到記憶體資料對齊的問題,需要謹慎考慮;
1)當成員變數的長度都小於處理器位數時,所有成員變數所佔的總空間一定是最長的變數所佔空間的整數倍;
2)如果某一成員變數長度大於處理器位數,則以處理器的位數為對齊單位;
關於資料對齊,詳見:
2、如果類成員函式不是虛函式,則它不佔空間;
3、如果成員函式中存在虛函式,則所有的虛函式儲存在虛函式表中,然後類中會有乙個指標指向該錶;這個指標需要占用空間,所以需要 +4;
此外,空類所佔的空間為1位元組,因為:
「乙個類能夠例項化,編譯器就需給它分配記憶體空間,來指示類例項的位址;這裡編譯器預設分配了乙個位元組(如:char),以便標記可能初始化的類例項,同時使空類占用的空間也最少(即1位元組)」 --引用
空結構體同理。
C 中類所佔的儲存空間
分析如下 類所佔的空間 類成員變數所佔空間 4 如果存在虛函式的話 注意 1 類成員所佔的空間可能會涉及到記憶體資料對齊的問題,需要謹慎考慮 1 當成員變數的長度都小於處理器位數時,所有成員變數所佔的總空間一定是最長的變數所佔空間的整數倍 2 如果某一成員變數長度大於處理器位數,則以處理器的位數為對...
C 類所佔空間總結
1.空類可以例項化,且所佔空間為一。原因 編譯器想為每個例項化物件分配乙個獨一無二的記憶體位址。2.類中有虛函式,則無論類中有幾個虛函式,類所佔空間加4。原因 類中存放乙個4位元組的虛指標指向虛函式列表,虛指標存放在最開始的記憶體資料中,即在其他成員變數之前。所有虛函式都在虛函式列表中,虛指標用來指...
C 中類物件所佔空間的大小
首先,平時所宣告的類只是一種型別定義,它本身是沒有大小可言的。因此,如果用sizeof運算子對乙個型別名操作,那得到的是具有該型別實體的大小。計算乙個類物件的大小時的規律 空類 單一繼承的空類 多重繼承的空類所佔空間大小為 1 位元組,下同 乙個類中,虛函式本身 成員函式 包括靜態與非靜態 和靜態資...