Question about garbage collection specification

Steven Schveighoffer via Digitalmars-d digitalmars-d at puremagic.com
Mon Jun 15 05:49:25 PDT 2015


On 6/15/15 8:08 AM, Dmitry Olshansky wrote:
> On 13-Jun-2015 14:32, 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?
>
> AFAIK the restriction was that pointers _themselves_ have to be stored
> at word-aligned addresses. This allows GC to scan memory cheaper w/o
> considering if some misaligned address may contain a pointer.

That doesn't make sense. Why would you want to do this?

The only rational thing I can think of is that you wouldn't want to 
store the result in an *actual* int pointer (lest it be used thinking it 
was valid without masking out the lower bits). But the example is 
storing it in a void *...

-Steve


More information about the Digitalmars-d mailing list