C 空類及沒有成員變數的類的大小例項分析

2022-10-04 05:36:10 字數 876 閱讀 5527

眾所周知的c++中空類的大小為1,但是除了空類之外的其他一些沒有成員變數的類的大小,還是有相當一部分開發人員對此有很多不明之處的。

這裡我們以如下**為例:

#includ程式設計客棧e

using namespace std;

class a {};

class b{};

class c 程式設計客棧:public a;

class d :public b, public c{};

int main()

程式執行的輸出結果為:

sizeof(a)=1

sizeof(b)=1

sizeof(c)=4

sizeof(d)=8

為什麼會出現這種結果呢?初學者肯定會對此疑惑不解,類a,b明明是空類,它的大小應該為為0,為什麼編譯器輸出的結果為1呢?這就是我們剛才所說的例項化的原因(空類同樣可以被例項化),每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目的,編譯器往往會給乙個空類隱含的加乙個位元組,這樣空類在例項化後在記憶體得到了獨一無二的位址,所以a,b的大小為1。

而類c是由類a派生而來程式設計客棧,它裡面有乙個純虛函式,由於有虛函式的原因,有乙個指向虛函式表的指標(vptr,有多個虛函式仍然是只有乙個指標),在32位的系統分配給指標的大小為4個位元組,所以最後得到c類的大小為4。

類d的大小更是會讓很多的初學者疑惑,類d是由類b,c派生而來的,它的大小應該為二者之和5,為什麼卻是8呢?這是因為為了提高例項在記憶體中的訪問效率,記憶體中會有資料對齊,於是類的大小往往被調整到4位元組的整數倍。並採取就近的法則,往大的方向取最近的倍數,就是該類的大小,所以類d的大小為8個位元組(假如d由3個空類和c派生而來,仍然是8)。

本文標題: c++空類及沒有成員變數的類的大小例項分析

本文位址:

C 空類以及沒有成員變數的類的大小

關於c 中空類的大小為1,我們大家都有所了解,但是除了空類之外的其他一些沒有成員變數的類的大小,還是有很多不明之處的。include usingnamespacestd classa classb classc publica classd publicb,publicc intmain 程式執行的...

c 空類的大小

初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...

c 空類的大小

定義乙個空類,沒有資料 class empty class test2 private empty private繼承 class test3 public empty public繼承 int tmain int argc,tchar argv cout class test1 class tes...