具有虚函数的类的大小增加了额外的4个字节
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了具有虚函数的类的大小增加了额外的4个字节相关的知识,希望对你有一定的参考价值。
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字节。
以上是关于具有虚函数的类的大小增加了额外的4个字节的主要内容,如果未能解决你的问题,请参考以下文章