定義乙個空類,沒有資料
class empty
;class test2:private empty//private繼承
;class test3:public empty//public繼承
;int _tmain(int argc, _tchar* argv)
{ cout << "class test1:"<
class test1:8
class test2:4
class test3:4
而當派生類繼承empty類時,會有所謂的ebo(empty base optimization,空白基類最優化),所以sizeof(test2)和sizeof(test3)都為sizeof(int)=4.
延伸 對齊問題
(環境vs2010 projects-properties-configuration properties-c/c++-->code generation-struct member alignment, 沒有修改過,預設值是default,即8位元組對齊)
若定義乙個class
class align
private:
int i;
則sizeof(align) = 4。
若class align
private:
char a;
int i;
則sizeof(align) = 8。位址圖
char a(佔乙個位址單元)
補齊補齊
補齊int i (佔4個位址單元)
若class align
private:
char a;
short s;
int i;
則sizeof(align) = 8。
char a(佔乙個位址單元)
補齊short s(佔2個位址單元)
int i(佔4個位址單元)
若class align
private:
char a;
int i;
short s;
則sizeof(align) = 12。
char a
補齊補齊
補齊int i
short s
補齊補齊
C 空類大小
class a class b class c public a class d public b,public c 類a,b明明是空類,它的大小應該為為 為什麼 編譯器輸出的結果為 呢?這就是我們剛才所說的例項化的原因 空類同樣可以被例項化 每個例項在記憶體中都有乙個獨一無二的位址,為了達到這個目...
c 空類的大小
初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻 大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗...
c 空類的大小
初學者在學習物件導向的程式語言時,或多或少的都些疑問,我們寫的 與最終生編譯成的 卻大相徑庭,我們並不知道編譯器在後台做了什麼工作 這些都是由於我們僅停留在語言層的原因,所謂語言層就是教會我們一些基本的語法法則,但不會告訴我們為什麼這麼做?今天和大家談的一點感悟就是我在學習程式設計過程中的一點經驗,...