posix_memalign - allocate aligned memory
Standard C library (libc, -lc)
#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_C_SOURCE >= 200112L
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.
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.
The alignment argument was not a power of two, or was not a
multiple of sizeof(void *).
Out of memory.
For an explanation of the terms used in this section, see attributes(7).
| Interface | Attribute | Value |
| Thread safety | MT-Safe |
POSIX.1-2024.
glibc 2.1.91. POSIX.1d, POSIX.1-2001.
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.