亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

64位Ubuntu下的奇怪輸出結果,sizeof(Class)

Shape.h的代碼定義如下:

class?Shape?{
public:
Shape();
virtual?~Shape();
virtual?double?calcArea();
};

Circle.h的代碼定義如下:

class?Circle:?public?Shape?{
public:
Circle(int?radius);
~Circle();
//double?calcArea();
protected:
int?m_radius;
};

Main.cpp主函數的代碼及輸出結果為:

int?main(void)
{
Shape?sh;
cout?<<?sizeof(sh)?<<?endl;
//?Output:?8
Circle?ci(100);
cout?<<?sizeof(ci)?<<?endl;
//?Output:?16
return?0;
}

這里就對第二輸出16不理解了,Shape類由于有虛函數表指針占8字節,Circle自身只有int類型的一個變量占4字節,那總共應該8+4=12字節呀?為啥這里是16字節呢?

我猜測是不是因為內存對齊的問題,求解釋呀!各位大神


正在回答

3 回答

一般這種情況都是因為內存對齊

1 回復 有任何疑惑可以回復我~
#1

帥踢鍋 提問者

請問64-bit Ubuntu的對齊單位是8字節嗎?哪里可以查到每個系統的對齊標準呀
2015-10-04 回復 有任何疑惑可以回復我~
#2

onemoo 回復 帥踢鍋 提問者

基本上是CPU尋址對地址對齊有要求,不能說是和系統相關。 一般在寫代碼時腦中有這個概念就可以了,我也沒有把這些都背下來。 要是問我哪里能查到,我只能說各CPU廠商的產品規格手冊中詳細說明了這些。
2015-10-04 回復 有任何疑惑可以回復我~
#3

帥踢鍋 提問者 回復 onemoo

原理是這樣!onemoo果然是大神啊,兩三次都是您回復的。實在太感謝啦
2015-10-04 回復 有任何疑惑可以回復我~

內存對齊可以參考:《計算機組成原理》

0 回復 有任何疑惑可以回復我~

今天也想到了這個問題,忘了字節對齊的概念了,原來如此。

0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之多態篇
  • 參與學習       66224    人
  • 解答問題       334    個

本教程將帶領大家體會面向對象三大特性中的多態特性

進入課程

64位Ubuntu下的奇怪輸出結果,sizeof(Class)

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號