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