![](https://secure.gravatar.com/avatar/3173e2ae99b980708880a85092da271e.jpg?s=120&d=mm&r=g)
Quoting rpgoldman@sift.info (rpgoldman@sift.info):
a pointer for the C code to use, the important thing is to avoid having the lisp gc move the byte vector around, which is accomplished by the use of register-lisp-value.
Are you sure? I believe r-l-v just returns an integer index into a global table that can later be used to retrieve the object again. That keeps it from being garbage collected, but not from movement in memory. What I am "using" (not well-tested) is this: (defun make-shareable-byte-vector (size) (make-array size :element-type '(unsigned-byte 8) :allocation :static-reclaimable)) (defmacro with-pointer-to-vector-data ((ptr-var vector) &body body) `(let ((,ptr-var ,vector)) ,@body)) (The old discussion of whether this kind of thing is worth supporting at all notwithstanding.) d.