core.runtime.GC memory alignment

growler growlercab at gmail.com
Mon Oct 28 20:47:12 PDT 2013


On Tuesday, 29 October 2013 at 00:45:59 UTC, Manu wrote:
> On 29 October 2013 04:33, monarch_dodra 
> <monarchdodra at gmail.com> wrote:
>
>> On Monday, 28 October 2013 at 02:44:54 UTC, Manu wrote:
>>
>>> I had a lot of informal conversations with Walter trying to 
>>> get my head
>>> around the details here.
>>> To my recollection, the intent was that it should behave like 
>>> C, and that
>>> S.alignof must certainly == 128 in that case. It can't work 
>>> otherwise.
>>> Alignment must be inherited by parent structures.
>>>
>>
>> But is that really what it means though? From the above 
>> conversation, it
>> would instead appear to mean that:
>> struct S
>> {
>>     int i;
>>     align(128) int j;
>> }
>> in this case, the *padding* needed until we reach j is 128 
>> bytes.
>>
>> It doesn't mean that S itself need to be 128 aligned.
>
>
> Both should be true, if it's not, it's a bug.
>

http://dlang.org/attribute.html#align
---
The alignment for the fields of an aggregate does not affect the 
alignment of the aggregate itself - that is affected by the 
alignment setting outside of the aggregate.

align (2) struct S {
   align (1):
      byte a;   // placed at offset 0
      int b;    // placed at offset 1
      long c;   // placed at offset 5
}

auto sz = S.sizeof;  // 14
---

My understanding of that is S is not affected by the alignment of 
its fields.


More information about the Digitalmars-d mailing list