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.