POSIX_MEMALIGN(3)

POSIX_MEMALIGN(3) | Library Functions Manual | POSIX_MEMALIGN(3)

# NAME

`posix_memalign`, `aligned_alloc` —
aligned memory allocation

# LIBRARY

Standard C Library (libc, -lc)

# SYNOPSIS

`#include <stdlib.h>`

int
`posix_memalign`(void **ptr, size_t alignment, size_t size);

void *
`aligned_alloc`(size_t alignment, size_t size);

# DESCRIPTION

The `posix_memalign`() function allocates size bytes of memory such that the allocation's base address is an even multiple of alignment, and returns the allocation in the value pointed to by ptr. The requested alignment must be a power of 2 at least as large as `sizeof`(void *).

The `aligned_alloc`() function allocates size bytes of memory such that the allocation's base address is an even multiple of alignment. The requested alignment must be a power of 2.

Memory that is allocated via `posix_memalign`() or `aligned_alloc`() can be used as an argument in subsequent calls to realloc(3) and free(3).

# RETURN VALUES

The `posix_memalign`() function returns the value 0 if successful; otherwise it returns an error value.

The `aligned_alloc`() function returns a pointer to the allocated memory if successful; on failure it returns `NULL` and sets errno to indicate the error.

# ERRORS

The `posix_memalign`() and `aligned_alloc`() functions will fail if:

[`EINVAL`]
  The alignment parameter is not a power of 2.
[`ENOMEM`]
  Memory allocation error.

The `posix_memalign`() function will also fail if

[`EINVAL`]
  The alignment parameter is not at least as large as `sizeof`(void *).

The `aligned_alloc`() function will also fail if

[`EINVAL`]
  The size parameter is not an integer multiple of alignment.

# SEE ALSO

free(3), malloc(3), realloc(3), valloc(3)

# STANDARDS

The `posix_memalign`() function conforms to IEEE Std 1003.1-2001 (“POSIX.1”). The `aligned_alloc`() function conforms to.

# HISTORY

ISO/IEC 9899:2011 (“ISO C11”) required size to be an integer multiple of alignment. This requirement was removed in later standards.

July 27, 2018 | NetBSD 9.0