SenoraGC is a relatively portable conservative GC for a slightly
cooperative environment. Its API is based on the Boehm GC.

The collector was originally intended for debugging and memory
tracing, but it can also act as a reasonbaly efficient,
general-purpose, conservative collector.

If you intend to use the CGC variant of Racket instead of the (usual)
3m variant, then instead of SenoraGC, consider using the variant of
the Boehm GC that is distributed with Racket; it should perform
significantly better. Enable the Boehm GC by providing `--disable-sgc`
to `configure`.

Usage:

The stack base must be manually identified with GC_set_stack_base();
no garbage collection will occur before this function is called.

All non-stack/register roots (i.e., global variables) must be
registered with GC_add_roots(). For certain platforms, this is
actually done automatically for static variables, but it can't be done
portably in general. (See AUTO_STATIC_ROOTS_IF_POSSIBLE in the flags
section.)

GC space is allocated using mmap() where available, malloc()
otherwise. The GC can define malloc() and free() itself if
platform-specific allocation routines are supported.
