Wielkość klas w przypadku dziedziczenia wirtualnego

Czy ktoś może wyjaśnić wielkość klas w przypadku dziedziczenia wirtualnego z użyciem funkcji wirtualnych.

<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>

Wynik wielkości klas jest następujący:

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

Kompilatorem, którego używam, jestgcc version 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

questionAnswers(4)

yourAnswerToTheQuestion