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字節呢?
我猜測是不是因為內存對齊的問題,求解釋呀!各位大神
2015-10-03
一般這種情況都是因為內存對齊
2020-05-29
內存對齊可以參考:《計算機組成原理》
2016-09-28
今天也想到了這個問題,忘了字節對齊的概念了,原來如此。