Tamaños de clase con herencia virtual en 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;
}

Las respuestas dependerían del compilador, pero me sorprendió ver esto como resultado

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

4
16

Si elimino la palabra clave virtual, el tamaño asignado es 4 y 8 respectivamente, que es lo que esperaba.

¿Por qué se ocupa exactamente el espacio extra? Sospecho que es para la tabla vptr o algo por el estilo, pero no lo sé con certeza.

Respuestas a la pregunta(5)

Su respuesta a la pregunta