| 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 | ||||||||||