前言:c++類所占用的記憶體空間實際上是指類的例項所占用的記憶體空間。其大小是由類中的成員變數決定的(靜態成員變數除外),由於成員函式放到**區由類的各個例項共享,故成員函式對類占用記憶體大小沒有影響。具體地說,類占用記憶體大小由以下三個方面決定:
1. 非靜態成員變數的記憶體占用之和
2. 考慮記憶體對其的問題;
3. 虛函式產生的額外記憶體開銷,即虛函式表指標(virtual table pointer);
具體例項如下:
1. c++空類所占用的記憶體空間
class a
;cout<
class b :public a
virtual
int getnum();//有虛函式表,就有虛函式指標,所以是4個位元組
virtual
int getindex();//雖然虛函式有多個,但只有乙個vtpr
};cout<3. 含有虛函式和其它成員變數的類所占用的記憶體空間
class a
;cout<4. 含有多種資料型別的成員變數
class c
; cout<5. 派生類繼承父類的情況
class a //基類
;class b :public a //派生類
;cout6. 派生類多重繼承的情況
如果乙個類多重繼承於其它的類,則其記憶體占用大小等於各個父類記憶體占用大小之和加上子類記憶體占用的大小。其中,基準為所有類(包括子類和多個父類)中原生型別,如int,double等,占用記憶體最大的那個。
總結:
c 類的大小
初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...
C 類的大小
乙個空類class a 的大小為什麼是1,因為如果不是1,當定義這個類的物件陣列時候a objects 5 objects 0 和objects 1 就在同乙個位址處,就無法區分。單繼承 includeusing namespace std class aprivate char k 3 class...
C 類的大小
注 以下測試,均是在 pragma pack 4 的情況下編譯的.1.首先,空類的大小並不是0,而是1 include using namespace std 記憶體對齊的方式是以4個位元組為一組.pragma pack 4 class a int main 2.int,float為4個位元組,do...