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 ());
}