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 memalignfunction allocates a block of size bytes whose
address is a multiple of boundary.  The boundary must be a
power of two!  The functionmemalignworks 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_memalignfunction is similar to thememalignfunction 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 ofsizeof (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 vallocis like usingmemalignand 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. |