C++ 有人能解释一下';尺寸';在此代码中
我不理解下面显示的输出 我知道,无论何时出现虚拟函数,它都会创建一个C++ 有人能解释一下';尺寸';在此代码中,c++,padding,packing,C++,Padding,Packing,我不理解下面显示的输出 我知道,无论何时出现虚拟函数,它都会创建一个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() ov
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;
}
#包括
使用名称空间std;
阶级基础
{
int x;
int-y;
intz;
公众:
虚拟void fun(){}
虚拟void fun2(){}
};
派生类:公共基
{
公众:
void fun()重写{}
};
int main(int argc,char const*argv[]
{
这是一个64位的构建吗?如果是的话,sizeof Base
将是:
8(vtable指针)+(3*4=12)(成员变量)+4(填充到8字节的倍数)
=24
由于Derived
仅从Base
派生,并且不添加任何成员变量,因此其大小相同
为什么要添加填充?以保持数组和堆栈中的8字节对齐。为什么这么重要?这是一个。可能的重复:我认为没有填充发生sizeof(Base)=sizeof(void*)+sizeof(int)*3
与sizeof(void*)对齐
这是8个字节。@hauron哇!谢谢。为什么不呢?应该是什么?@Yksisarvinen敲击“典型”的动作:)