Question about garbage collection specification
Steven Schveighoffer via Digitalmars-d
digitalmars-d at puremagic.com
Mon Jun 15 04:59:13 PDT 2015
On 6/14/15 7:02 AM, "Marc =?UTF-8?B?U2Now7x0eiI=?= <schuetzm at gmx.net>"
wrote:
> On Saturday, 13 June 2015 at 22:07:26 UTC, deadalnix wrote:
>> On Saturday, 13 June 2015 at 11:32:20 UTC, rsw0x wrote:
>>> http://dlang.org/garbage.html
>>>
>>> Do not take advantage of alignment of pointers to store bit flags in
>>> the low order bits:
>>> p = cast(void*)(cast(int)p | 1); // error: undefined behavior
>>>
>>> if this restriction is actually imposed - why does
>>> std.bitmanip.tagged{ClassRef,Pointer} even exist?
>>
>> That seems like an arbitrary limitation. This will create an interior
>> pointer, which the GC needs to recognize anyway.
>>
>> The doc need to be updated.
>
> I see David Nadlinger already said so in the PR, but that's how I
> understand it:
>
> AFAIU the purpose of this restriction is to allow the GC to take
> advantage of alignment: a pointer with the lowest bit set cannot point
> to a 4-byte aligned struct, for example.
Huh? Of course it can!
struct S
{
ubyte[4] arr;
int x;
}
auto s = new S;
auto p = &s.arr[1]; // points at an S in memory.
I don't see how GC can take any advantage of this.
-Steve
More information about the Digitalmars-d
mailing list