Tamaño de las clases en caso de herencia virtual.

Alguien puede explicar el tamaño de las clases en el caso de herencia virtual que involucra funciones virtuales.

<code>   class A{
          char k[ 3 ];
          public:
          virtual void a(){};
          };

   class B : public  A{
          char j[ 3 ];
          public:
          virtual  void b(){};
          };

   class C : public virtual A{
          char i[ 3 ];
          public:
          virtual void c(){};
          };

   class D : public B, public C{
          char h[ 3 ];
          public:
          virtual void d(){};
          };
</code>

La salida del tamaño de las clases es:

<code>    sizeof(A): 8
    sizeof(B): 12
    sizeof(C): 16
    sizeof(D): 32
</code>

El compilador que estoy usando esgcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

Respuestas a la pregunta(4)

Su respuesta a la pregunta