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