Tablas virtuales y diseño de memoria en herencia virtual múltiple.

Considere la siguiente jerarquía:

struct A {
   int a; 
   A() { f(0); }
   A(int i) { f(i); }
   virtual void f(int i) { cout << i; }
};
struct B1 : virtual A {
   int b1;
   B1(int i) : A(i) { f(i); }
   virtual void f(int i) { cout << i+10; }
};
struct B2 : virtual A {
   int b2;
   B2(int i) : A(i) { f(i); }
   virtual void f(int i) { cout << i+20; }
};
struct C : B1, virtual B2 {
   int c;
   C() : B1(6),B2(3),A(1){}
   virtual void f(int i) { cout << i+30; }
};

Cual es elexacto diseño de memoria deC ¿ejemplo? ¿Cuántos vptrs contiene, dónde se coloca exactamente cada uno de ellos? ¿Qué tablas virtuales se comparten con la tabla virtual de C? ¿Qué contiene exactamente cada mesa virtual?

Aquí cómo entiendo el diseño:

----------------------------------------------------------------
|vptr1 | AptrOfB1 | b1 | B2ptr | c | vptr2 | AptrOfB2 | b2 | a |
----------------------------------------------------------------

dóndeAptrOfBx es el puntero aA instancia queBx Contiene (ya que la herencia es virtual).
¿Es eso correcto? Cuales funcionesvptr1 ¿puntos a? Cuales funcionesvptr2 ¿puntos a?

Dado el siguiente código

C* c = new C();
dynamic_cast<B1*>(c)->f(3);
static_cast<B2*>(c)->f(3);
reinterpret_cast<B2*>(c)->f(3);

¿Por qué todas las llamadas af impresión33?

Respuestas a la pregunta(2)

Su respuesta a la pregunta