Размеры классов с виртуальным наследованием в C ++

#include<iostream>

using namespace std;

class abc
{
    int a;
};
class xyz : public virtual abc
{
    int b;
};

int main()
{
    abc obj;
    xyz obj1;
    cout<<endl<<sizeof(obj);
    cout<<endl<<sizeof(obj1);
    return 0;
}

Ответы будут зависеть от компилятора, но я удивляюсь, когда вижу это как результат

~/Documents/workspace/tmp ‹.rvm-›  $ ./class_sizes   

4
16

Если я удалю виртуальное ключевое слово, то выделенный размер будет 4 и 8 соответственно, что я и ожидал.

Почему дополнительное место занято точно? Я подозреваю, что это для таблицы vptr или что-то в этом роде, но не знаю наверняка.

Ответы на вопрос(5)

Ваш ответ на вопрос