Re: [Gc] Creating stack-like memory containing GC roots
Christian Schafmeister <[email protected]> Wed, 23 Sep 2015 17:20:13 -0400
| Newsgroups | gmane.comp.programming.garbage-collection.boehmgc |
|---|---|
| Message-ID | <[email protected]> |
Shiro - thank you very much. I’ll check that out. > On Sep 23, 2015, at 5:13 PM, Shiro Kawai <[email protected]> wrote: > > I once used bdwgc's "kind" mechanism for the similar purpose. The "kind" is > conceptually a custom allocator with your own mark procedure. So, you allocate > your stack by the new kind so that GC knows about it, but you make the attached > marker scan only the active region of your stack. > > I suppose the kind mechanism is more for generic purpose (e.g. "atomic" or "stubborn" > allocators are realized by kinds), so using it for just custom stack region may be > an overkill. The source suggests that the kind isn't for casual use. I'd like bgwgc > experts here to suggest better advices. > > If you're interested, check Gauche's vm.c. > Look at the code inside #ifdef USE_CUSTOM_STACK_MARKER. > > https://github.com/shirok/Gauche/blob/master/src/vm.c <https://github.com/shirok/Gauche/blob/master/src/vm.c> > > > > > > > > > On Wed, Sep 23, 2015 at 9:52 AM, Christian Schafmeister <[email protected] <mailto:[email protected]>> wrote: > > I’ve written a Common Lisp compiler that uses LLVM as the backend and that interoperates with C++. > > I’m using the Boehm garbage collector and I need to create a stack alongside the regular C++ stack that holds GC roots. > > Is there any way using the Boehm garbage collector to identify a region of memory that will contain this stack and continuously update the top of the stack so that Boehm only examines the region that can contain pointers? > > I need to push a frame containing GC roots onto the stack and then later pop the frame. Ideally I would just need to provide Boehm a pointer that points to the end of the current frame and everything from that address up to and including the first frame would be scanned for roots. > > I have seen the GC_add_roots function but that lets me define a region once. I need some way to continuously update the end of the stack. > Currently I’m using GC_malloc and GC_free to allocate and free frames - but I feel that for something like a stack this has more overhead than I need. > I’ve tried doing this all on the main C++ stack - but I have to use non-standard features like __builtin_alloca or variable length arrays and they have caused me a lot of grief. > > Best, > > Christian Schafmeister > Professor, > Chemistry Department > Temple University > _______________________________________________ > bdwgc mailing list > [email protected] <mailto:[email protected]> > https://lists.opendylan.org/mailman/listinfo/bdwgc <https://lists.opendylan.org/mailman/listinfo/bdwgc> _______________________________________________ bdwgc mailing list [email protected] https://lists.opendylan.org/mailman/listinfo/bdwgc