C++ 带有虚拟函数的类的大小增加了额外的4个字节 class NoVirtual{ INTA; 公众: void x()常量{} int i()常量{return 1;} }; 第一类虚拟{ INTA; 公众: 虚空x()常量{} int i()常量{return 1;} }; 第二类虚拟{ INTA; 公众: 虚空x()常量{} 虚int i()常量{return 1;} }; int main(){ cout
我假设您是在64位机器上编译的,因为int的大小是4字节。对于64位机器,指针的大小通常是8字节,int的大小是4字节。为了满足保存读取周期的要求C++ 带有虚拟函数的类的大小增加了额外的4个字节 class NoVirtual{ INTA; 公众: void x()常量{} int i()常量{return 1;} }; 第一类虚拟{ INTA; 公众: 虚空x()常量{} int i()常量{return 1;} }; 第二类虚拟{ INTA; 公众: 虚空x()常量{} 虚int i()常量{return 1;} }; int main(){ cout,c++,polymorphism,C++,Polymorphism,我假设您是在64位机器上编译的,因为int的大小是4字节。对于64位机器,指针的大小通常是8字节,int的大小是4字节。为了满足保存读取周期的要求 编译器添加了额外的4个字节(填充),因此结果是16个字节,其中实际需要的大小是12个字节。您忘记了对齐方式。请看,您知道添加的指针,所以有点。无论如何,这不是一个直接的答案。 class NoVirtual { int a; public: void x() const {} int i
编译器添加了额外的4个字节(填充),因此结果是16个字节,其中实际需要的大小是12个字节。您忘记了对齐方式。请看,您知道添加的指针,所以有点。无论如何,这不是一个直接的答案。
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;
}