10.4.2 Segments and Allocation Types

Some GC interface functions take an allocation type as an argument, which is one of the keywords below. There are two categories of allocation type.

The main allocation types, which can be used as the what argument to the function sys:apply-with-allocation-in-gen-num , are:


The segment contains only conses.


The segment contains only symbols (and does not include symbol names or any of the other properties of symbols).


The segment contains only function objects.


The segment contains only objects that do not contain pointers (strings, specialized numeric arrays, double-floats).


The segment contain other objects, that is any object that contain pointers, and is not a symbol, cons or a function.

The derived allocation types are:


The segment contains a mixture of :other , :function and :symbol , but not :cons or :non-pointer .


The segment contains cons objects that are static.


The segment contains objects that do not contain pointers and are static (currently stacks are also allocated in these segments).


The segment contains a mixture like :mixed, but static.


The segment contains weak objects (arrays, and internals of weak hash tables).


The segment contains a single very large simple vector. The vector is static.


The segment contains a single very large non-pointer object (a string or a specialized numeric array). The vector is static.

Segments of allocation type :other-big or :non-pointer-big can be as large as required to hold their object.

For all other allocation types, the size of each single segment is restricted. The implementation limit is currently 256MB, and you can specify a smaller limit using sys:set-maximum-segment-size .

LispWorks User Guide - 21 Jul 2006