Question about garbage collection specification

via Digitalmars-d digitalmars-d at puremagic.com
Sun Jun 14 04:02:59 PDT 2015


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. The GC doc [1] 
mentions alignment several times, among them:
"Do not misalign pointers if those pointers may point into the GC 
heap"

As for arbitrary pointer arithmetic being allowed, I guess that's 
because the language doesn't distinguish between GC and non-GC 
pointers. And note that it is un- at safe anyway.

[1] http://dlang.org/garbage.html


More information about the Digitalmars-d mailing list