Размер классов в случае виртуального наследования

Может кто-нибудь объяснить размер классов в случае виртуального наследования с использованием виртуальных функций.

   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(){};
          };

Вывод размера классов:

    sizeof(A): 8
    sizeof(B): 12
    sizeof(C): 16
    sizeof(D): 32

Используемый мной компилятор: gcc версии 4.6.1 (Ubuntu/Linaro 4.6.1-9ubuntu3)

5
задан Kundan Kumar 10 May 2012 в 19:49
поделиться