Subject: Re: self-hosting gc, narrowed
From: Erik Naggum <erik@naggum.net>
Date: Mon, 18 Mar 2002 09:42:20 GMT
Newsgroups: comp.lang.lisp,comp.lang.scheme
Message-ID: <3225433349116418@naggum.net>

* Jeffrey Siegal <jbs@quiotix.com>
| It eliminates the need for a separate tag (which is only a few bits in a
| langauge with few types) on every object, not just fixnums.

  I have wondered about this, so maybe you can help me understand.  When
  you allocate objects from type-specific arenas, how many types do you do
  this for?  Does a user-defined class hierarchy get their own arena for
  each class?  How do you get the type of the object?  (I think one would
  either have type information at the beginning of the page or use the page
  number as some kind of index into a table, or use virtual memory address
  space to sort of have tag bits in the upper address bits.)  This would
  save space compared to using type information in the object itself, but
  it seems the pages would have to be fairly large to make sure the type
  information would be in an active cache line.  However, this approach
  seems to me to work well only if you do not use the type information all
  the time, because the memory accesses required to obtain the type would
  be fairly expensive compared to extracting low-end bits.  I have read
  about BIBOP long ago, but I did not find an explanation of how you mad
  back from page to type or for which types this was employed.

///
-- 
  In a fight against something, the fight has value, victory has none.
  In a fight for something, the fight is a loss, victory merely relief.