The address of a block returned by malloc
or realloc
in the GNU system is always a multiple of eight. If you need a block whose address is a multiple of a higher power of two than that, use memalign
or valloc
. These functions are declared in `stdlib.h'.
With the GNU library, you can use free
to free the blocks that memalign
and valloc
return. That does not work in BSD, however---BSD does not provide any way to free such blocks.
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 calling malloc
to allocate a somewhat larger block, and then returning an address within the block that is on the specified boundary.
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 (size, getpagesize ()); }