Subject: [clisp-list] impnotes explanation of GC

From: [email-masked] (Don Cohen)
Date: Thu, 21 Jun 2001 11:35:23 -0700 (PDT)

Having not looked at impnotes for some time, I'm generally impressed
with all the progress.  I was interested to see a new section on GC
and now that I've read it I have some questions.  Perhaps the answers
could eventually find their way into later versions of impnotes.

I know, this is the thanks you get for writing documentation.  And
perhaps I should be reading the code in order to find out, and when I
do I should, of course, write the documentation so people can complain
to me!  Well, if anyone who already knows the answers can explain them
to me (and the list) I'll be happy to try to organize them into new
documentation that can be added to impnotes.

================

A small detail - on the page based memory models it's not clear how gc
(or even allocation) works with objects bigger than a page.  I assume
that a multipage array is allocated in consecutive virtual memory
addresses.  If the first such page contains an object that is gc'd
then we end up moving the whole array?  Or perhaps multipage objects
always start on a page boundary?

SPVW_PURE_BLOCKS lists as an advantage "No 16 MB total size limit". 
I don't understand what this has to do with such a limit, i.e., why
do the others have a limit?  By total size I guess this means the
lisp heap?

The next section, with title "The following combinations of memory
model and mmap tricks are possible:" doesn't make sense to me either.
Is generational gc really a mmap trick?  I'd like to understand better
how the generational gc works in each case.  Also I'd like at least
a brief explanation of the different types of mmap.  And finally,
how can you tell for the clisp you're running which memory model is
in use, which type of mmap you're using, whether you're using
generational gc, etc.
Also the two tables are distingushed by "TYPECODES" which are not
mentioned anywhere else.  Is this the same as the tags above?
I guess not, since everything is supposed to have tags.  So what does
not have type codes?  Is this a property of a clisp version or a
build?  How can you tell for the clisp you're running which case
applies?