2.3 Memory Usage

Some of the parameters that can be customized determine how much memory
Scheme uses and how that memory is used. This section describes how
Scheme's memory is organized and used; subsequent sections describe
command-line options and environment variables that you can use to
customize this usage for your needs.

Scheme uses four kinds of memory:

A stack that is used for recursive procedure calls.

A heap that is used for dynamically allocated objects, like
cons cells and strings. Storage used for objects in the heap
that become unreferenced is eventually reclaimed by garbage
collection.

A constant space that is used for allocated objects, like the
heap. Unlike the heap, storage used for objects in constant space is
not reclaimed by garbage collection. Constant space is used for
objects that are essentially permanent, like procedures in the runtime
system.

Some extra storage that is used by the microcode (the part of the system
that is implemented in C).

All kinds of memory except the last may be controlled either by
command-line options or by environment variables.

MIT/GNU Scheme uses a two-space copying garbage collector for
reclaiming storage in the heap. The second space, used only during
garbage collection, is dynamically allocated as needed.

Once the storage is allocated for the constant space and the heap,
Scheme will dynamically adjust the proportion of the total that is used
for constant space; the stack and extra microcode storage is not
included in this adjustment. Previous versions of MIT/GNU Scheme
needed to be told the amount of constant space that was required when
loading bands with the --band option. Dynamic adjustment of
the heap and constant space avoids this problem.

If the size of the constant space is not specified, it is
automatically set to the correct size for the band being loaded; it is
rarely necessary to explicitly set the size of the constant space.
Additionally, each band requires a small amount of heap space; this
amount is added to any specified heap size, so that the specified heap
size is the amount of free space available.

The Scheme expression `(print-gc-statistics)' shows how much heap
and constant space is available (see Garbage Collection).