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字节。
有人可以解释原因吗?
我假设您正在64位机器上进行编译,因为int的大小是4bytes。典型的64位机器指针大小将是8个字节,int大小是4个字节。为了满足Data Alignment requirement保存读取周期,编译器增加额外的4个字节(填充)因此结果是实际所需大小为12字节的16字节。