Every object in libscheme is an instance of the C structure
Scheme_Object. Each instance of Scheme_Object contains
a pointer to a type object (that also happens to be a
Scheme_Object) and two data words. If an object requires more
than two words of storage or if the object is some other type of
foreign C structure, it is stored in a separate memory location and
pointed to by the ptr_val field. The actual definition of
Scheme_Object appears in figure 6.
Figure: The definition of Scheme_Object
While many Scheme implementations choose to represent certain special
objects as immediate values (e.g., small integers, characters, the
empty list, etc.) this approach was not used in libscheme
because the ``everything is an object with a tag approach'' is simpler
and easier to debug. A side effect of this decision is that
libscheme code that does heavy small integer arithmetic will
allocate garbage that must be collected, in contrast to higher
performance Scheme implementations that only dynamically allocate very
large integers.