Are heap objects never moved by the garbage collector?

Diggory diggsey at googlemail.com
Fri May 31 11:58:14 PDT 2013


On Friday, 31 May 2013 at 17:14:52 UTC, Jonathan M Davis wrote:
> On Friday, May 31, 2013 18:31:38 Carl Sturtivant wrote:
>> "The D Programming Language" (TDPL) p.178 asserts the 
>> following.
>> 
>> "The objects themselves stay put, that is their locations in
>> memory never change after creation."
>> 
>> I take this to mean that the D garbage collector doesn't move
>> live objects and adjust all references to them the way that 
>> some
>> garbage collectors do. That is to say, the addresses of objects
>> are not changed by the garbage collector.
>> 
>> Does D guarantee this?
>
> I don't believe that there is any such guarantee in the 
> language. Structs on
> the heap get moved around all the time, so having objects with 
> references to
> themselves is effectively disallowed. The GC does not currently 
> ever move any
> objects, but I don't believe that the language itself 
> guarantees that it never
> will. It may be that in the future it would, though it's 
> unlikely given some
> of the technical difficulties caused by having unmanaged 
> pointers and void* and
> whatnot. Languages which run in a VM and are restricted to 
> managed pointers
> are able to make many more assumptions than D is, making it 
> much easier for
> them to do moveable garbage collectors.
>
> - Jonathan M Davis

I assume you mean structs on the stack rather than on the heap - 
structs on the heap are never moved currently.


More information about the Digitalmars-d-learn mailing list