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