Question about garbage collection specification
Paulo Pinto via Digitalmars-d
digitalmars-d at puremagic.com
Sun Jun 14 04:36:58 PDT 2015
On Sunday, 14 June 2015 at 11:03:00 UTC, Marc Schütz 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. 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
Wouldn't it make sense to do so?
Active Oberon, Modula-3 and .NET make such difference in their
pointer types.
I would imagine it could help in terms of what is possible for GC
improvements.
--
Paulo
More information about the Digitalmars-d
mailing list