posix_memalign3
Allocate aligned memory
Usage
#include <stdlib.h>
int posix_memalign(void **memptr, size_t alignment, size_t size);
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
posix_memalign():
_POSIX_C_SOURCE >= 200112L
Library
Standard C library (libc, -lc)
Overview
posix_memalign() allocates size bytes and places the address of the allocated memory in *memptr. The address of the allocated memory will be a multiple of alignment, which must be a power of two and a multiple of sizeof(void *). This address can later be successfully passed to free(3). If size is 0, then the value placed in *memptr is either NULL or a unique pointer value.
The memory is not zeroed.
aligned_alloc(3) is a standard function that provides the same functionality, and has a more ergonomic prototype. Use that instead.
Return value
posix_memalign() returns zero on success, or one of the error values listed in the next section on failure. The value of errno is not set.
Errors
- EINVAL
-
The alignment argument was not a power of two, or was not a multiple of sizeof(void *).
- ENOMEM
-
Out of memory.
Attributes
For an explanation of the terms used in this section, see attributes(7).
| Interface | Attribute | Value |
| posix_memalign() | Thread safety | MT-Safe |
Caveats
On Linux (and other systems), posix_memalign() does not modify memptr on failure. A requirement standardizing this behavior was added in POSIX.1-2008 TC2.
Releases
12 releases since Debian 3.1 (Sarge); the text changed 11 times.