[Previous] [Contents] [Index] [Next]

Caution: This version of this document is no longer maintained. For the latest documentation, see http://www.qnx.com/developers/docs.

posix_memalign()

Allocate aligned memory

Synopsis:

#include <stdlib.h>

int posix_memalign( void ** memptr,
                    size_t alignment,
                    size_t size );

Arguments:

memptr
A pointer to a location where posix_memalign() can store a pointer the memory.
alignment
The alignment to use for the memory. This must be a multiple of size( void * ).
size
The size, in bytes, of the block to allocate.

Library:

libc

Use the -l c option to qcc to link against this library. This library is usually included automatically.

Description:

The posix_memalign() function allocates size bytes aligned on a boundary specified by alignment. It returns a pointer to the allocated memory in memptr.

The buffer allocated by posix_memalign() is contiguous in virtual address space, but not physical memory. Since some platforms don't allocate memory in 4K page sizes, you shouldn't assume that the memory allocated will be physically contiguous if you specify a size of 4K or less.

You can obtain the physical address of the start of the buffer using mem_offset() with fd=NOFD.

Returns:

0
Success.
-1
An error occurred (errno is set).

Errors:

EINVAL
The value of alignment isn't a multiple of size( void * ).
ENOMEM
There's insufficient memory available with the requested alignment.

Classification:

POSIX 1003.1 ADV

Safety:
Cancellation point No
Interrupt handler No
Signal handler Yes
Thread Yes

See also:

errno, free(), malloc(), memalign()


[Previous] [Contents] [Index] [Next]