2.7 System and Stack Spaces

The virtual addresses below 0800000016 are not occupied by Lisp objects, since Lisp objects with type code 0 are positive fixnums. Some of this space is used for other purposes by Lisp. A couple of pages (4096 byte pages) at address 0010000016 contain tables that Lisp needs to access frequently. These include the allocation table, the active-catch-frame, information to link to C routines, etc. Memory at location 0020000016 contains code for various miscops. Also, any C code loaded into a running Lisp process is loaded after the miscops. The format of the allocation table is described in chapter Alloc-Chapter.

The control stack grows upward (toward higher addresses) in memory, and is a framed stack. It contains only general Lisp objects (with some random things encoded as fixnums). Every object pointed to by an entry on this stack is kept alive. The frame for a function call contains an area for the function’s arguments, an area for local variables, a pointer to the caller’s frame, and a pointer into the binding stack. The frame for a Catch form contains similar information. The precise stack format can be found in chapter Runtime.

The special binding stack grows downward. This stack is used to hold previous values of special variables that have been bound. It grows and shrinks with the depth of the binding environment, as reflected in the control stack. This stack contains symbol-value pairs, with only boxed Lisp objects present.

All Lisp objects are allocated on word boundaries, since the IBM RT PC can only access words on word boundaries.