| Allegro CL version 10.1 Object described on page has changed in 10.1. 10.0 version |
Arguments: object &optional type
Returns information about storage classifications or of the storage-classification of an object.
If type is not given, then the object's storage attributes are examined, and the most specific description of these attributes is returned in the form of a keyword. The possible keywords are:
:immediate
, which means the object is not
referenced with a pointer (fixnums, e.g.)
:static
, which means the object is stored in an
area which is not garbage collected.
:tenured
, which means the object is stored in
oldspace (also called tenured space).
:new
,
which means the object is stored in newspace but will, if it survives,
eventually be tenured.
:panified
, which means that the object is stored
in newspace and will never be tenured. (The name comes from
Peter Pan, who never grew old.) See the note just below.
:weak
, which means the object is in newspace, will
not be tenured, and is a weak vector.
:finalized
, which means that the object is a
finalization.
:weak-key-non-panified
, which means that the object
is a weak-key vector in newspace, but may be tenured (after which it
will no longer be weak).
:weak-key-panified
, which means that the object is
a weak-key vector in newspace which will not be tenured.
:stack-allocated
, which means the object resides on
a stack somewhere. Note that on a non-os-threads Lisp the value may be
seen as :stack-allocated
even if it is outside of
the stack it resides and should have been
called :static
. An object for which
lispval-storage-type returns
:stack-allocated
will still cause
sys:pointer-storage-type to
return :static
when passed as an argument to it.
:pure
, which means the object is in the pll
(pure-lisp-library) space, and is thus
read-only/shared. A :pure
object will still cause
sys:pointer-storage-type to
return :static
when passed as an argument to it.
See pll-file (and links from there) and
also Getting
information on memory management using cl:room
in gc.htm for more information on pure space.
Note on :panified objects: Only system-created objects can have
storage type :panified
but sometimes these objects are
created as a consequnce of user action. The key vector of a weak-keys
hashtable is typically a :panified
object, though this
can be controlled. See cl:make-hash-table in
implementation.htm.
type can be :all
or one of the
storage types keywords in the list above.
If type is :all
, a list of
possible storage types is returned (and the
object argument is ignored). Thus, when
type is :all
, the call is for
information about the current implementation of lispval-storage-type, which may be
modified in a patch subsequent to the release.
If type is a storage type, lispval-storage-type returns true
or nil
as the storage type of
object matches or does not match
type. Here match means `is of that storage
type', not `is eq
to the value returned by lispval-storage-type when
type is not specified'. If lispval-storage-type returns
:weak
when type is not specified, it will return
true when type is :weak
and
when type is :new
.
See gc.htm for a discussion of where Lisp objects are stored. lispval-storage-type replaces the now deprecated pointer-storage-type.
;; A 1-d static array has storage type :STATIC ;; (2-d and higher dimension ;; static arrays have headers that are Lisp objects so they will have ;; storage type :NEW or :TENURED, but their data vectors ;; (available via INSPECT) ;; will have storage type :STATIC): CL-USER(24): (sys:lispval-storage-type (make-array 3 :allocation :static :element-type 'fixnum :initial-element 2)) :STATIC ;; Fixnums are immediates: CL-USER(25): (sys:lispval-storage-type 22) :IMMEDIATE ;; Most Lisp objects start in new space: CL-USER(26): (setq a (cons 1 2)) (1 . 2) CL-USER(27): (sys:lispval-storage-type a) :NEW ;; And after surviving several scavenges, they typically ;; move to oldspace: CL-USER(28): (gc) (gc) (gc) (gc) (gc) CL-USER(29): (sys:lispval-storage-type a) :TENURED ;; Here we show the use of the TYPE argument: CL-USER(30): (setq a (make-array 10 :weak t)) #(NIL NIL NIL NIL NIL NIL NIL NIL NIL NIL) CL-USER(31): (sys:lispval-storage-type a) :WEAK CL-USER(32): (sys:lispval-storage-type a :new) T CL-USER(5): (sys:lispval-storage-type a :weak) T CL-USER(6):
Copyright (c) 1998-2022, Franz Inc. Lafayette, CA., USA. All rights reserved.
The object described on this page has been modified in the 10.1 release; see the Release Notes.
Created 2019.8.20.
| Allegro CL version 10.1 Object described on page has changed in 10.1. 10.0 version |