这样的struct能占内存多少字节?求大牛!该如何处理

这样的struct能占内存多少字节??求大牛!
废话不说,直接上代码:
C/C++ code

struct A  
{  
    A();  
    ~A();  
    int m1;  
    int m2;  
}a;  
struct B  
{  
    B();  
    ~B();  
    int m1  
    char m2;  
    static char m3;  
}b;  
struct C  
{  
    C();  
    virtual ~C();  
    int m1;  
    int m2;  
}c;  



结果是这样的:sizeof(a)=8 sizeof(b)=8 sizeof(c)=12
不知道为什么是这样?virtual函数还能占大小???求大虾解释。


------解决方案--------------------
virtual
会有个虚拟列表,会多出个指向虚拟列表的指针,一个指针4个字节
------解决方案--------------------
拥有virtual函数的类中,需要维护一个虚函数表的指针,一个指针的大小是4字节,所以~~~
------解决方案--------------------
a 4+4 = 8
b static不占用空间 4+1+3(补齐) = 8
c vptr占用4个字节
------解决方案--------------------
我重新说明下:
1.对于A 大小为8 显然,两个int型各占4个byte
2.对于B 大小为8 一个整型4byte,一个字符型1byte,static 变量存放在程序的data segment中,和对象实体大小无关。还有一个所谓的allignment限制,也就是边界调整,对于32位的机器,调整位4byte的整数倍,主要是为了提升数据的访问速度。所以再填补3byte ,总过8byte.
3.对于C 先看下它的对象模型
_vptr ---->指向虚函数表的指针 用于virtual机制。 4byte
int m1 ---- 4byte
int m2 -----4byte
其中,_vptr的位置并不固定,vc编译器在首部,其他编译器可能在尾部。
建议楼主看下 inside c++ object model ,里面Data语意学 有详细介绍。


------解决方案--------------------
探讨

引用:

a 4+4 = 8
b static不占用空间 4+1+3(补齐) = 8
c vptr占用4个字节

这个补齐是啥意思?为啥要这样的,char 就占一个字节不行吗?

------解决方案--------------------
C类里边有个指向虚函数表的指针,所以多了四个字节