【发布时间】:2013-01-06 03:38:19
【问题描述】:
class RootBase{
public:
RootBase():ai(12){}
virtual void fas(){
printf("%p \n", this);
}
private:
int ai;
};
class Base : virtual public RootBase{
public:
Base():bai(1){}
virtual void fas(){
}
virtual void fa(){
}
private:
int bai;
};
Base *pBase = new Base;
我测试了关于类的内存位置的虚拟继承关系案例。结果让我吃惊,因为 Base 的大小是 24 字节。我能理解这20个字节,包括虚函数表指针、虚基表指针和成员变量。
pBase指向的Base对象的内存分布为:
60 77 41 00 68 77 41 00 01 00 00 00 00 00 00 00 54 77 41 00 0c 00 00 00
但我无法理解第 13-16 个字节的含义,0x00000000,一个 NULL(x86 32 位中的整数 0)。四个字节 0 有什么作用? (操作系统:win xp,IDE:visual studio 8.0)
我也认为整数0代表对齐填充,但是没有理由填充到8字节。
【问题讨论】:
-
我可能看的不够仔细,但是填充?
-
Mummmmmmm~ 但是需要对齐吗?我认为这个类是四字节对齐的。不需要做填充。
标签: c++ visual-studio