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指针;