class RootBase{
public:
RootBase():ai(12){}
virtual void fas(){
printf("%p \n", this);
}
private:
int ai;
};
class Base : virtual public RootBase{
public:
Base():bai(1){}
virtual void fas(){
}
virtual void fa(){
}
private:
int bai;
};
Base *pBase = new Base;
我測試了關於類的內存位置的虛擬繼承關係案例。結果讓我感到驚訝,因爲Base的大小是24 Bytes。我可以理解包含虛函數表指針,虛擬基表指針和成員變量的20個字節。爲什麼VS編譯器在對象內存中插入NULL
由PBASE指出基本對象的內存分配是:
60 77 41 00 68 77 41 00 01 00 00 00 00 00 00 00 54 77 41 00 0c 00 00 00
但我不明白的13個含義 - 16字節,00000000,空(整數0的x86 32位)。四個字節0做什麼? (操作系統:贏得XP,IDE:視覺工作室8.0)
我也認爲整數0代表對齊填充,但沒有理由填充到8個字節。
我可能沒有仔細看,但填充? – chris
Mummmmmmm〜但是需要對齊嗎?我認爲這個類是四字節對齊。不需要填充。 –
http://msdn.microsoft.com/en-us/library/453x4xdd.aspx –