Alloc +Foreign.Marshal -package

module Foreign.Marshal.Alloc
base Foreign.Marshal.Alloc
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
base Foreign.Marshal.Alloc
alloca f executes the computation f, passing as argument a pointer to a temporarily allocated block of memory sufficient to hold values of type a. 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.
allocaArray :: Storable a => Int -> (Ptr a -> IO b) -> IO b
base Foreign.Marshal.Array
Temporarily allocate space for the given number of elements (like Foreign.Marshal.Alloc.alloca, but for multiple elements).
allocaArray0 :: Storable a => Int -> (Ptr a -> IO b) -> IO b
base Foreign.Marshal.Array
Like allocaArray, but add an extra position to hold a special termination element.
allocaBytes :: Int -> (Ptr a -> IO b) -> IO b
base Foreign.Marshal.Alloc
allocaBytes n f executes the computation f, passing as argument a pointer to a temporarily allocated block of memory of n bytes. The block of memory is sufficiently aligned for any of the basic foreign types that fits into a memory block of the allocated size. 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.
allocaBytesAligned :: Int -> Int -> (Ptr a -> IO b) -> IO b
base Foreign.Marshal.Alloc
malloc :: Storable a => IO (Ptr a)
base Foreign.Marshal.Alloc
Allocate a block of memory that is sufficient to hold values of type a. The size of the area allocated is determined by the sizeOf method from the instance of Storable for the appropriate type. The memory may be deallocated using free or finalizerFree when no longer required.
mallocArray :: Storable a => Int -> IO (Ptr a)
base Foreign.Marshal.Array
Allocate storage for the given number of elements of a storable type (like Foreign.Marshal.Alloc.malloc, but for multiple elements).
mallocArray0 :: Storable a => Int -> IO (Ptr a)
base Foreign.Marshal.Array
Like mallocArray, but add an extra position to hold a special termination element.
mallocBytes :: Int -> IO (Ptr a)
base Foreign.Marshal.Alloc
Allocate a block of memory of the given number of bytes. The block of memory is sufficiently aligned for any of the basic foreign types that fits into a memory block of the allocated size. The memory may be deallocated using free or finalizerFree when no longer required.
pooledMalloc :: Storable a => Pool -> IO (Ptr a)
base Foreign.Marshal.Pool
Allocate space for storable type in the given pool. The size of the area allocated is determined by the sizeOf method from the instance of Storable for the appropriate type.
pooledMallocArray :: Storable a => Pool -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Allocate storage for the given number of elements of a storable type in the pool.
pooledMallocArray0 :: Storable a => Pool -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Allocate storage for the given number of elements of a storable type in the pool, but leave room for an extra element to signal the end of the array.
pooledMallocBytes :: Pool -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Allocate the given number of bytes of storage in the pool.
pooledRealloc :: Storable a => Pool -> Ptr a -> IO (Ptr a)
base Foreign.Marshal.Pool
Adjust the storage area for an element in the pool to the given size of the required type.
pooledReallocArray :: Storable a => Pool -> Ptr a -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Adjust the size of an array in the given pool.
pooledReallocArray0 :: Storable a => Pool -> Ptr a -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Adjust the size of an array with an end marker in the given pool.
pooledReallocBytes :: Pool -> Ptr a -> Int -> IO (Ptr a)
base Foreign.Marshal.Pool
Adjust the storage area for an element in the pool to the given size.
realloc :: Storable b => Ptr a -> IO (Ptr b)
base Foreign.Marshal.Alloc
Resize a memory area that was allocated with malloc or mallocBytes to the size needed to store values of type b. The returned pointer may refer to an entirely different memory area, but will be suitably aligned to hold values of type b. The contents of the referenced memory area will be the same as of the original pointer up to the minimum of the original size and the size of values of type b. If the argument to realloc is nullPtr, realloc behaves like malloc.
reallocArray :: Storable a => Ptr a -> Int -> IO (Ptr a)
base Foreign.Marshal.Array
Adjust the size of an array

Show more results