因为virtual,Base需要额外的4byte的空间来保存虚函数表指针
嗯,这个我知道。但是4+4+8=16,16又是8的倍数,Base占的内存应该是16啊,应该跟A一样的啊
@fun~:
你没看明白,是4+4+8+4,Base所需要额外存储的虚函数表指针4byte你没算进去,根据#pragma pack(8),所以得出24。
详细可以参考http://hi.baidu.com/skychongrichie/item/9e5f693e60ac324c80f1a725
@Aaron.Pan:
我不是算进去了吗?virtual指针占4字节+int d 4字节+ double b 8字节,不是16字节吗?
我可能看不明白,能跟我说详细些吗?谢谢了
@fun~:
virtual void Print();-------- 4
int d;------------------------4
double b;-------------------8
但因为Base类中Print方法是虚函数,所以还需要一个虚函数表指针来指向虚函数表------------4
这样就是 4+4+8+4 然后根据#pragma pack(8),得出24
@Aaron.Pan:
virtual void Print();占4个字节与虚函数表指针不是同一个概念,详细的内容http://hi.baidu.com/skychongrichie/item/9e5f693e60ac324c80f1a725讲得很清楚。
@Aaron.Pan:
哦, 可是我又做了个测试,结果跟你讲的不一样啊
class A
{
public:
virtual void Print();
}
class B
{
public:
virtual void Print();
int m_a;
}
在vc上测了下,A占了4字节,B占了8字节,按照你的思路,A应该是8,B应该是12,这是为什么?
我已经蒙了,感觉虚函数真蛋疼啊