[gclist] Boehm's collector and "dynamic roots"

Ji-Yong D. Chung virtualcyber@erols.com
Thu, 1 Mar 2001 00:36:37 -0500


Hi,

    I am having a problem with getting
Boehm's collector to work for me.  I was wondering
if anyone could help.

    I have just incorporated Boehm's collector for my
scheme interpreter.  It is implemented in C++.
The interpreter keeps its own stack (rather than using 
C++ stack).  To get the collector
to scan "my" stack, I registered it as a
root segment using one of the
interfaces provided by Boehm's collector.

    My problem is that I have allocated approximately
200k for the stack, and on each collection cycle,
Boehm's collector is likely to scan the whole thing
as one of its roots.

    If I were using a C++ stack, Boehm's collector would just
scan the stack until it reached the top.  Because my stack 
is not a C++ stack, and it is registered as a root
segment, Boehm's collector
is treating it as just that -- a root segment
rather than as stack.

    I am wondering if there is any way to cause
the collector to scan only to the top of MY OWN
stack, rather than the whole 200k.

    For this, it seems that I need to implement
additional interfaces that could add
what one may call "dynamic" roots -- roots
whose size will change when I push
my stack.
    
    Has anyone encountered a similar problem
before, and know of a relatively simple solution
to this problem?  (Perhaps a few pointers
to how I might need to modify Boehm's 
collector?)

    I would appreciate any comments/enlightenment.