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