Dynamic Aliens are allocated using the
malloc library, so foreign code
free on the result of
make-alien, and Lisp code can
free-alien on objects allocated by foreign code.
This macro returns a dynamically allocated Alien of the specified type (which is not evaluated.) The allocated memory is not initialized, and may contain arbitrary junk. If supplied, size is an expression to evaluate to compute the size of the allocated object. There are two major cases:
derefto change the result to an array before you can use
derefto read or write elements:
(defvar *foo* (make-alien (array char 10))) (type-of *foo*) ⇒ (alien (* (array (signed 8) 10))) (setf (deref (deref foo) 0) 10) ⇒ 10
If supplied, size is used as the first dimension for the array.
(make-alien int)returns a
(* int). If size is specified, then a block of that many objects is allocated, with the result pointing to the first one.
This function frees the storage for alien (which must have
been allocated with
with-alien, which stack-allocates Aliens.