posix_memalign(3)

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).

InterfaceAttributeValue
posix_memalign()Thread safetyMT-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.

  1. 3.1
  2. 4.0
  3. 5.0
  4. 6.0
  5. 7
  6. 8
  7. 9
  8. 10
  9. 11
  10. 12
  11. 13
  12. Arch

Standards

POSIX.1-2024.

History

glibc 2.1.91. POSIX.1d, POSIX.1-2001.

From man-pages 6.19-1 in Arch Linux 2026-11-01. Parsed by carta from the page's man source.