C++中,以VS2010爲編譯環境;
在vs的環境下。
這裏不講字節對齊的東西,很多寫字節對齊的文章。
講編譯對象的時候,編譯器給對象存儲空間加入的數據;
1. 類中有vitual 函數時候,會加入一個vfptr指針,只想虛函數表,表中存儲着所有該類虛函數的地址,C++中的多態機制就是靠他來實現的。
2. 如果是虛繼承,會加入一個vbptr的指針,指向虛基類;
注意 在gcc環境中,編譯器把虛函數表,虛基表合併成一張表,所有隻會存在一個指針
class BaseEmpty
{
void fun(){}
};
BaseEmpty size: 1
class BaseOne
{
virtual void fun(){}
};
BaseOne size : 4,多了一個vfptr指針;
class ExtendOne :public BaseOne
{
};
ExtendOne size:4;
class ExtendTwo : virtual public BaseOne
{
};
ExtendTwo size :8 ,多了一個vbptr指針;