The joy of garbage collection



Hi. Sorry if this is a bit of topic, but I thought people here would be
more interested than people in comp.lang.c
I'm writing a simple lisp interpreter, just for the sheer joy of it,
and I've fallen down a bit at the memory management stage. I want to
implement a simple mark and sweep garbage collector, and I understand
how to do the mark part (having dillegently studied Knuth), but it
seems that the sweep bit is incompatible with storing unboxed data in
the heap, which I would like to do. Once the gc has marked all of the
objects that are active, how does it free up the rest, and in what
sense are they free. Does the program have to maintain a list of free
memory somewhere, and if so, how?
Thanks in advance

.