Double abstract class Inheritance concern.
Chris Lattner
sabre@nondot.org
Mon Mar 29 14:03:00 GMT 2004
Tiago Stein wrote:
> class A{};
> class B :public A{};
> class C: public A{ int g; };
> class D: public B, public C {
> unsigned int foo;
> };
> Why sizeof class D is 12? Should not be 8?
I believe the reason is that the ABI does not permit multiple different
instances of A to be located at the same address, even if they have zero
size. If the size of the structure was 8, all of "A", "B", and "A" would
have offset zero.
I'm not sure WHY this is required, but this is the reason it happens at
least. A declaration of "A X[100];" allocates 100 bytes as
a result of the same rule.
-Chris
--
http://llvm.cs.uiuc.edu/
http://www.nondot.org/~sabre/Projects/
More information about the Gcc
mailing list