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主函數(shù)的代碼及輸出結果為:
int?main(void) { Shape?sh; cout?<<?sizeof(sh)?<<?endl; //?Output:?8 Circle?ci(100); cout?<<?sizeof(ci)?<<?endl; //?Output:?16 return?0; }
這里就對第二輸出16不理解了,Shape類由于有虛函數(shù)表指針占8字節(jié),Circle自身只有int類型的一個變量占4字節(jié),那總共應該8+4=12字節(jié)呀?為啥這里是16字節(jié)呢?
我猜測是不是因為內(nèi)存對齊的問題,求解釋呀!各位大神
2015-10-03
一般這種情況都是因為內(nèi)存對齊
2020-05-29
內(nèi)存對齊可以參考:《計算機組成原理》
2016-09-28
今天也想到了這個問題,忘了字節(jié)對齊的概念了,原來如此。