注:以下測試,均是在#pragma pack(4)的情況下編譯的.
1.首先,空類的大小並不是0,而是1!
#include
using
namespace
std;
//記憶體對齊的方式是以4個位元組為一組.
#pragma pack(4)
class a
;int main()
2.int, float為4個位元組,double為8個位元組.
3.普通函式不佔記憶體.
#include
using
namespace
std;
#pragma pack(4)
class a
};int main()
4.有虛函式或作為單繼承的子類.一般4個位元組.(不同環境不同.)
#include
using
namespace
std;
#pragma pack(4)
class a
//4};
int main()
原來有虛函式的類,都是由乙個虛指標去指向乙個叫做虛表的東西,所以虛函式本身是不佔記憶體的,只是虛指標的大小為4個位元組.但是,在單繼承中,即使有多個虛函式,仍然只有乙個虛指標!!!依舊為4個位元組.
5.有虛函式的多繼承.
#include
using
namespace
std;
#pragma pack(4)
class b
};class c
};class a : public b ,public c
};int main()
我們可以看到物件s中,含有從類b中的虛指標,從類c中的虛指標,剩下兩個變數.
c 類的大小
初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...
C 類的大小
乙個空類class a 的大小為什麼是1,因為如果不是1,當定義這個類的物件陣列時候a objects 5 objects 0 和objects 1 就在同乙個位址處,就無法區分。單繼承 includeusing namespace std class aprivate char k 3 class...
C 類的大小
前言 c 類所占用的記憶體空間實際上是指類的例項所占用的記憶體空間。其大小是由類中的成員變數決定的 靜態成員變數除外 由於成員函式放到 區由類的各個例項共享,故成員函式對類占用記憶體大小沒有影響。具體地說,類占用記憶體大小由以下三個方面決定 1.非靜態成員變數的記憶體占用之和 2.考慮記憶體對其的問...