问个虚继承时sizeof类大小的有关问题

问个虚继承时sizeof类大小的问题C/C++ code#include iostreamusing namespace stdclass demo{int cpub

问个虚继承时sizeof类大小的问题

C/C++ code
#include <iostream>using namespace std;class demo{    int c;public:    virtual void f(){}};class Derived : public virtual demo{    virtual void g(){}};int main(){    cout<<sizeof(demo)<<endl;    cout<<sizeof(Derived)<<endl;    return 0;}

上面的代码结果是8,12,但是把demo中的int c去掉之后,结果就变成了4,4。
不明白为什么啊,上网查也没看明白,有人帮忙讲解下么?gcc的编译器。

[解决办法]
可以不探究这个, 因为我也不太懂, 你看你用到了虚函数, 虚继承, 比较复杂.

如果要探究只能看<<深入探索C++对象模型>>了。
[解决办法]
空基类优化!
[解决办法]
帮你在VS2010下调试了下,不是你说的那样,不知是不是编译器不同而不同。

测试结果:
开始:8,16
去掉后:4,12

这个结果很刚好是减掉一个int的大小
[解决办法]
8和12的。基类一个int 4字节,一个虚函数,导致了一个虚函数表的指针4字节。所以基类是8字节,然后继承类里面又多了一个自身的虚函数的表指针4字节。所以继承类是12字节。
去掉int后都是4字节。我猜测是因为没有数据了,导致编译器认为上面那个是纯虚函数了吧。两个虚函数都合成到一个虚函数表里面了。只是个人猜测。坐等大牛。没有研究过gcc关于C++的内存模型。
楼主可以搜索下gcc关于C++的内存模型。
[解决办法]
探讨

空基类优化!

[解决办法]
不同的编译器,处理方式有所不同,所以不同的编译器你可能会得到不同的结果。

这种问题,一点不研究不太好,过渡研究也不太好。看完《Inside C++ Object Model》就可以了。