sizeof(class)解决办法

sizeof(class)
class A
{
public:
/*virtual void print()
{
std::cout<<"A"<<std::endl;
}*/
private:
int d;
char a;
};
class B : public A
{
public:
void print()
{
std::cout<<"B"<<std::endl;
}
private:
char c;
int b;
};

求sizeof(A) = 8,sizeof(B) = 16;
若去掉A类中的int d,sizeof(A) = 1,sizeof(B) = 8;觉得很奇怪,为什么第一种情况下求sizeof(B)的时候,a和c没有按照结构体对齐方式,c放到a的地址+1处,而去掉后,竟然感觉像是出现了这种情况,求解,另外想问下继承后,虚表指针和基类成员在派生类中的位置。
sizeof 类 虚指针 sizeof 虚指针

------解决方案--------------------
感觉这样设置合理一些,因为会有派生类向基类的转换,如 B b; (A)b.xxx
此时b中存储的是完整的A类中的数据,否则就有占用b中内存地址作为A类中对齐产生的无效数据

个人理解,仅供参考。
------解决方案--------------------
这里有几篇文章,讲得非常详细,有图有代码,看完后,应该对这些有比较好的认识。希望能帮到你
http://blog.csdn.net/haoel/article/details/1948051 
http://blog.csdn.net/haoel/article/details/3081328
http://blog.csdn.net/haoel/article/details/3081385