A bug in my code
Sergey Gromov
snake.scaly at gmail.com
Mon Sep 8 03:09:09 PDT 2008
Jarrett Billingsley <jarrett.billingsley at gmail.com> wrote:
> On Sun, Sep 7, 2008 at 12:59 PM, bearophile <bearophileHUGS at lycos.com> wrote:
> > Uhm... I don't understand fully: do you mean roots don't become deleted
> > when they have nothing that points to them?
> > The docs say:
> > "Roots are references to memory allocated by the collector that are
> > maintained in memory outside the collector pool."
>
> I think what you should be using instead is addRange. addRoot more or
> less tells the GC "never collect memory referenced by this pointer",
> but it doesn't actually scan the memory _pointed to_ by the roots for
> pointers.
This just cannot be. A root is a place where a tree of live memory
objects is grafted. That's why it is called a "root". A memory block
pointed to by a root is kept alive and, obviously, scanned for pointers
to other memory blocks if it hasPointers().
There's a problem with addRoot() that, if the memory block is re-
allocated, the old root stops serving its purpose. In that case you
need to remove an old root and add the new one, pointing into the re-
allocated block.
More information about the Digitalmars-d-learn
mailing list