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

Can someone please explain the results returned by 'sizeof' in this code

我不明白下面显示的输出。

我知道只要存在虚函数,它就会创建一个 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; 
}

24
24
4
[Finished in 0.3s]

这是 64 位版本吗?如果是这样,sizeof Base 将是:

8 (vtable pointer) + (3 * 4 = 12) (member variables) + 4 (pad to multiple of 8 bytes) = 24

由于Derived仅派生自Base且未添加任何成员变量,因此其大小相同。

为什么要加padding?在数组和堆栈中保持 8 字节对齐。为什么这很重要?那是 different question.