C 類的大小

2021-08-14 14:42:29 字數 1063 閱讀 8257

注:以下測試,均是在#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.考慮記憶體對其的問...