Transitioning to a type aware Garbage Collector
Sean Kelly
sean at f4.ca
Mon Jan 22 19:30:57 PST 2007
Kyle Furlong wrote:
> Walter Bright wrote:
>> To improve GC performance, we need to transition to a GC that is aware
>> of the types of what it is allocating.
>>
>> So problems can happen if the type of allocated memory is changed
>> after it is allocated, via casting. The way to avoid this is to
>> allocate as void[] memory that will be cast, as in:
>>
>> struct Foo { ... };
>> Foo[] f;
>>
>> p = new void[100];
>> f = cast(Foo[])p; // ok
>> byte[] b = cast(byte[])p;
>> f = cast(Foo[])b; // ok, GC still regards memory as void[]
>>
>> rather than:
>>
>> p = new byte[100];
>> f = cast(Foo[])p; // will likely eventually corrupt memory
>>
>> The GC will regard void[] as a chunk of memory containing arbitrary
>> data of arbitrary types, and so will treat it conservatively.
>>
>> In general, regard memory allocated by the GC as anything other than
>> void[] as being *strongly typed*.
>
> As this move happens, some interesting possibilities open for more
> efficient garbage collection. One innovation is CBGC, connectivity based
> garbage collection.
>
> The paper describing this class of algorithm can be found here:
> http://portal.acm.org/citation.cfm?id=949337&coll=GUIDE&dl=ACM&CFID=6079566&CFTOKEN=11708043
>
>
> I have done an extensive review of the literature regarding garbage
> collection in compiled languages (and others) and this seems to me to be
> the best bet for a modern GC for D.
>
> Thoughts?
From what little I know of the approach, I agree. A strongly typed
moving GC may be a bit unrealistic, but CBGB seems a pretty solid
compromise.
Sean
More information about the Digitalmars-d-announce
mailing list