where many Common Lisp functions reference memory on the 3600. Knowledge of
this behavior allows programmers to choose data types and structures that
minimize memory references for a given application.
The function
|
references its argument(s)
|
aref
|
always
|
arrayp
|
never
|
cdr
|
when the argument is not nil
|
eq
|
never
|
eql
|
when both arguments are extended numbers
|
equal
|
under most circumstances
|
integerp
|
when the argument is an extended number
|
keywordp
|
when the argument is a symbol
|
length
|
when the argument is not nil
|
list
|
never (new memory is allocated)
|
numberp
|
never
|
stringp
|
when the argument is an array
|
symbol-plist
|
always
|
symbolp
|
never
|
1+
|
when the argument is an extended number
|
One technique for improving paging performance is to use a less general function
that does not reference memory instead of a specific function that does reference
memory. A common example is to use eql instead of equal when possible. A
more subtle example is to use arrayp rather than stringp, when it is known that
the object being tested cannot be a nonstring array. Similarly, symbolp can
replace keywordp, when appropriate. (Note that the paging behavior of Common
Lisp functions is determined more by the implementation than the language
specification.)
Declarations can be used to improve performance in all implementations. One
declaration that can reduce memory references on the Symbolics 3600 is the
sys:array-register declaration. This declares arrays to be commonly referenced
and caches array dimensions and other consistency information on the stack in
"fast" memory, removing the need to reference the array header every time the
array is accessed. Similarly, the sys:downward-function and
sys:downward-funarg declarations can be used to specify that a lexical closure is
only being passed downward. This allows the function to be allocated on the stack
in "fast" memory, rather than on the heap.
Garbage Collection
Garbage collection is the process that automatically performs object deallocation
(storage reclamation). Although garbage collection removes the burden of memory
|