class NoVirtual {
int a;
public:
void x() const {}
int i() const { return 1; }
};
class OneVirtual {
int a;
public:
virtual void x() const {}
int i() const { return 1; }
};
class TwoVirtuals {
int a;
public:
virtual void x() const {}
virtual int i() const { return 1; }
};
int main() {
cout << "int: " << sizeof(int) << endl;
cout << "NoVirtual: "
<< sizeof(NoVirtual) << endl;
cout << "void* : " << sizeof(void*) << endl;
cout << "OneVirtual: "
<< sizeof(OneVirtual) << endl;
cout << "TwoVirtuals: "
<< sizeof(TwoVirtuals) << endl;
return 0;
}
输出为:
NoVirtual:4
无效*:8
OneVirtual:16
TwoVirtuals:16
问题是:
由于OneVirtual和TwoVirtuals类具有虚函数,因此类的大小应为sizeof(int)+ sizeof(void *),即12bytes。但是大小打印为16字节。
有人可以解释原因吗?
答案 0 :(得分:3)
我假设您正在64位计算机上进行编译,因为int的大小是4bytes。对于64位计算机,指针大小通常为8字节,int大小为4字节。要满足Data Alignment requirement以节省读取周期 编译器添加额外的4个字节(填充),因此结果是16字节,其中实际所需的大小是12个字节。