C 中類所佔的儲存空間

2021-05-28 03:19:33 字數 692 閱讀 3415

先看程式再分析:

#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 位元組,下同 乙個類中,虛函式本身 成員函式 包括靜態與非靜態 和靜態資...