有人可以解释此代码中 '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.
我不明白下面显示的输出。
我知道只要存在虚函数,它就会创建一个 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.