The module Foreign.Marshal.Alloc provides operations to allocate and deallocate blocks of raw memory (i.e., unstructured chunks of memory outside of the area maintained by the Haskell storage manager). These memory blocks are commonly used to pass compound data structures to foreign functions or to provide space in which compound result values are obtained from foreign functions.
If any of the allocation functions fails, a value of nullPtr is produced. If free or reallocBytes is applied to a memory area that has been allocated with alloca or allocaBytes, the behaviour is undefined. Any further access to memory areas allocated with alloca or allocaBytes, after the computation that was passed to the allocation function has terminated, leads to undefined behaviour. Any further access to the memory area referenced by a pointer passed to realloc, reallocBytes, or free entails undefined behaviour.
All storage allocated by functions that allocate based on a size in bytes must be sufficiently aligned for any of the basic foreign types that fits into the newly allocated storage. All storage allocated by functions that allocate based on a specific type must be sufficiently aligned for that type. Array allocation routines need to obey the same alignment constraints for each array element.
alloca :: Storable a => (Ptr a -> IO b) -> IO b |
The memory is freed when f terminates (either normally or via an exception), so the pointer passed to f must not be used after this.
allocaBytes :: Int -> (Ptr a -> IO b) -> IO b |
The memory is freed when f terminates (either normally or via an exception), so the pointer passed to f must not be used after this.
malloc :: Storable a => IO (Ptr a) |
The memory may be deallocated using free or finalizerFree when no longer required.
mallocBytes :: Int -> IO (Ptr a) |
The memory may be deallocated using free or finalizerFree when no longer required.
realloc :: Storable b => Ptr a -> IO (Ptr b) |
If the argument to realloc is nullPtr, realloc behaves like malloc.
reallocBytes :: Ptr a -> Int -> IO (Ptr a) |
If the pointer argument to reallocBytes is nullPtr, reallocBytes behaves like malloc. If the requested size is 0, reallocBytes behaves like free.
free :: Ptr a -> IO () |
finalizerFree :: FinalizerPtr a |