Transitioning to a type aware Garbage Collector

Bill Baxter dnewsgroup at billbaxter.com
Tue Jan 23 05:55:04 PST 2007


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*.

Yay!  Will there also be explicit calls to take specific ranges out of 
the scan list if needed? (Or to tell the GC what type a void-allocated 
chunk has changed to.)

--bb



More information about the Digitalmars-d-announce mailing list