On Thu, 01 Apr 2010 05:27:55 -0400, bearophile <[email protected]> wrote: > > Justin Spahr-Summers: > > I think the D2 spec puts restrictions on what you can do with GC- > > allocated pointers (can't convert them to integers, can't perform > > arithmetic on them outside of their bounds, etc.), and I think they're > > restrictive enough that a copying garbage collector could work with no > > changes to compliant code. > > Without annotations here the compiler has to find by itself that instances of > this class is harder to move: > > > import std.c.stdio: printf; > > class Foo { > int x; > int* ptrx; > this(int xx) { > this.x = xx; > this.ptrx = &(this.x); > } > } > void main() { > auto f = new Foo(10); > printf("%d %d\n", f.x, *f.ptrx); > auto p = f.ptrx; > } > > Bye, > bearophile
But shouldn't the GC know the size of Foo instances? It seems like it should be able to rewrite any GC-managed pointers that point to 'f' or anywhere inside it.
