Each ECL object belongs to one of the 22 implementation types. The
implementation types are shown in Table 4-1 with the corresponding Common-Lisp
data types. In the table, the compiled functions are divided into three
cfun is the type of compiled functions without
cclosure is the type of compiled functions with environment
(i.e., the type of compiled closures) and
gfun is the type of compiled
generic functions of CLOS.
|Implementation Type||Common-Lisp Data Type
Each object is represented by a cell allocated in the heap area of the interpreter. The size of the cell is determined by the implementation type of the object.
The implementation types are classified according to the size of the cells for the objects of the type, as shown in Table 4-2. The size of the cells in the same type class is the same.
For objects of the (implementation) types
instance), the cell is simply a header of the
object. The body of the object is allocated separately from the cell and is
managed in a different manner. The memory space occupied by the body of such
an object is called a block. A block is either contiguous or
relocatable depending on the area in which it is allocated. The
difference between the two areas will be explained below. Table 4-3 lists
these types, along with the contents of the body and the kind of the block.
Usually, the body of an array, a vector, a bit-vector, or a string is allocated
as a relocatable block. In ECL, the function
make-array takes an
extra keyword argument :static. If the :static argument is supplied
with a non-() value, then the body of the array is allocated as a