C++对象模型一个有关问题: sizeof得到的大小和小弟我想象的不一样

C++对象模型一个问题: sizeof得到的大小和我想象的不一样!
我知道的基础知识: 一个类有虚函数,就有了虚指针,size+4。无论有多少个虚函数,都只有一个虚指针,size还是+4。虚指针指向虚函数表。 
  
为什么下面的程序中,s3的大小是4? 我觉得是8才对。 
s5继承了两个父类,自己也有virtual函数,那么我认为,在32位系统上,它应该有3个虚表指针,大小应该是12。但是运行结果却是8。我尝试了vc2005/2010,一样的效果,程序运行打印4,4,4,8,8. 
  
我的问题是,既然子类和父类公用一个虚指针不冲突,那么多余一个父类的话,为什么要添加虚指针呢? 多于一个父类就冲突了?
C/C++ code

#include "stdafx.h" 
#include <string> 
using namespace std; 
struct s1{ 
     virtual void f(); 
}; 
struct s2{ 
     virtual void g(); 
}; 
struct s3: public s1{ 
     virtual void f(); 
}; 
struct s4: public s1,s2{//s4的大小是8,我理解。 
}; 
struct s5: public s1,s2{//s5的大小是8,我就不理解了。难道不是12么? 
     virtual void h(); 
}; 
int  main( void){ 
     printf("%d,%d,%d,%d,%d\n",sizeof(s1),sizeof(s2),sizeof(s3),sizeof(s4),sizeof(s5)); 
     return 0; 
} 


 


------解决方案--------------------
看<深度探索C++对象模型>

s5的虚函数表是和s1,s2其中一个共用的.
------解决方案--------------------
既然子类和父类公用一个虚指针不冲突,那么多余一个父类的话,为什么要添加虚指针呢? 多于一个父类就冲突了?
冲突不冲突得看能否保证子类的完整性。
------解决方案--------------------
两个父类之间没有继承关系 不能共用