Thanks for the code -- it has one small bug:
(let* ((length (gensym)) (size (gensym)))
`(let* ((,length (length ,lisp-array))
(,size (* ,length 8)))
(The inner let should be let*). It's too bad I have
to copy the array since it can be large.