Transitioning to a type aware Garbage Collector

Walter Bright newshound at digitalmars.com
Mon Jan 22 13:48:49 PST 2007


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



More information about the Digitalmars-d-announce mailing list