[virtmach] VM with garbage collection
Chris Dollin
virtmach@iecc.com
Fri, 11 Jan 2002 12:08:41 +0000
On Friday 11 January 2002 10:02, Stephan wrote:
> I am trying to build a VM for a garbage collected language.
> The byte code will typically contain many references to
> garbage collected objects. This means that the GC must be
> somehow able to distinguish bytecode instructions from
> pointers to GC-able objects.
> 2. Apparently, the Smalltalk 80 VM splits a code vector in 2 parts:
> a part with the byte codes and a "constant vector" containing
> pointers to GCable objects. The bytecode contains indexes into
> the constant vector. This leads to 1 extra redirection whenever
> a GCable object has to be found. Moreover, it leads to problems
> when there are more than 256 constants in a procedure.
This is the approach I took in my own VM (and I stole it from the
Poplog VM). The extra indirection seems to be an acceptable
cost (arguing without empirical evidence):
* given the overheads of an interpreted VM, one extra
indirection in the relevant instructions isn't much overhead
* multiple references to the same object share the same index,
so the code is smaller and more uniform
* the GC code is decoupled from the instruction format
For technical reasons I was operating with some additional
constraints:
- all my instructions are 16 bits wide
- an instruction has at most one "external" reference
I deat with the external reference limit by adding an additional
instruction, call it PBIC r (push bigly-indexed constant), which
added the topof-stack integer * sizeof rfield to r before using the
result as the index, thus deferring the problem to making big
integers).
--
Chris "electric hedgehog" Dollin
C FAQs at: http://www.faqs.org/faqs/by-newsgroup/comp/comp.lang.c.html