Struct size

Lars T. Kyllingstad via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Apr 19 07:23:29 PDT 2014


On Saturday, 19 April 2014 at 12:26:16 UTC, Andrej Mitrovic via 
Digitalmars-d-learn wrote:
> On 4/19/14, Lars T. Kyllingstad via Digitalmars-d-learn
> <digitalmars-d-learn at puremagic.com> wrote:
>> Say I have two structs, defined like this:
>>
>>      struct A { /* could contain whatever */ }
>>
>>      struct B { A a; }
>>
>> My question is, is it now guaranteed that A.sizeof==B.sizeof?
>
> The best thing to do is add a static assert and then you can 
> relax:

That's what I've done, but it would be nice to know the code 
won't break due to some combination of platform and/or compiler 
switches I didn't think to test.  Anyway, I've played around a 
bit, and found that a combination of struct and field alignment 
*can* break my assumption:

     align(1) struct A
     {
         char c;
         align(1) int i;
     }

     struct B { A a; }

Now, A.sizeof is 5, while B.sizeof is 8.  I'd have to add 
align(1) to the declaration of B to fix it.


More information about the Digitalmars-d-learn mailing list