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++ 带有虚拟函数的类的大小增加了额外的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

我假设您是在64位机器上编译的,因为int的大小是4字节。对于64位机器,指针的大小通常是8字节,int的大小是4字节。为了满足保存读取周期的要求
编译器添加了额外的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;
}