Node:Aligned Memory Blocks, Next:Malloc Tunable Parameters, Previous:Efficiency and Malloc, Up:Unconstrained Allocation
The address of a block returned by malloc
or realloc
in
the GNU system is always a multiple of eight (or sixteen on 64-bit
systems). If you need a block whose address is a multiple of a higher
power of two than that, use memalign
, posix_memalign
, or
valloc
. These functions are declared in stdlib.h
.
With the GNU library, you can use free
to free the blocks that
memalign
, posix_memalign
, and valloc
return. That
does not work in BSD, however--BSD does not provide any way to free
such blocks.
void * memalign (size_t boundary, size_t size) | Function |
The memalign function allocates a block of size bytes whose
address is a multiple of boundary. The boundary must be a
power of two! The function memalign works by allocating a
somewhat larger block, and then returning an address within the block
that is on the specified boundary.
|
int posix_memalign (void **memptr, size_t alignment, size_t size) | Function |
The posix_memalign function is similar to the memalign
function in that it returns a buffer of size bytes aligned to a
multiple of alignment. But it adds one requirement to the
parameter alignment: the value must be a power of two multiple of
sizeof (void *) .
If the function succeeds in allocation memory a pointer to the allocated
memory is returned in This function was introduced in POSIX 1003.1d. |
void * valloc (size_t size) | Function |
Using valloc is like using memalign and passing the page size
as the value of the second argument. It is implemented like this:
void * valloc (size_t size) { return memalign (getpagesize (), size); }Query Memory Parameters for more information about the memory subsystem. |