有人可以在此代码中解释'sizeof'返回的结果

Pri*_*ave -1 c++ packing padding

我不承担下面显示的输出.

我知道无论何时存在虚函数,它都会创建一个vptr但仍然打印的尺寸超出我的预期:

#include<iostream>
using namespace std; 

class Base
{
 int x;
 int y;
 int z;
public:
 virtual void fun(){}
 virtual void fun2(){}
};

class Derived:public Base
{
 public:
  void fun() override {} 
};

int main(int argc, char const *argv[])
{
  cout<<sizeof(Base)<<endl;
  cout<<sizeof(Derived)<<endl;
  cout<<sizeof(int)<<endl; 
}
Run Code Online (Sandbox Code Playgroud)

24
24
4
[0.3秒内完成]

Pau*_*ers 6

这是64位构建吗?如果是这样,那sizeof Base将是:

8(vtable指针)+(3*4 = 12)(成员变量)+ 4(填充到8个字节的倍数)= 24

由于Derived仅从中派生Base并且不添加任何成员变量,因此其大小相同.

为什么要添加填充?在阵列和堆栈上保持8字节对齐.为什么这很重要?那是一个不同的问题.