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;
}
The output is:
NoVirtual: 4
void* : 8
OneVirtual: 16
TwoVirtuals: 16
Question is:
Since OneVirtual and TwoVirtuals class have virtual function, size of class should be sizeof(int) + sizeof(void*) i.e. 12bytes. But size is printed as 16bytes.
Can someone explain why?
 
    