NAME

posix_memalign — aligned memory allocation (ADVANCED REALTIME)

SYNOPSIS

[ADV] [Option Start] #include <stdlib.h>

int posix_memalign(void **
memptr, size_t alignment, size_t size); [Option End]

DESCRIPTION

The posix_memalign() function shall allocate size bytes aligned on a boundary specified by alignment, and shall return a pointer to the allocated memory in memptr. The value of alignment shall be a power of two multiple of sizeof(void *).

Upon successful completion, the value pointed to by memptr shall be a multiple of alignment.

If the size of the space requested is 0, the behavior is implementation-defined: either a null pointer shall be returned in memptr, or the behavior shall be as if the size were some non-zero value, except that the behavior is undefined if the the value returned in memptr is used to access an object.

[CX] [Option Start] The free() function shall deallocate memory that has previously been allocated by posix_memalign(). [Option End]

For purposes of determining the existence of a data race, posix_memalign() shall behave as though it accessed only memory locations accessible through its argument and not other static duration storage. The function may, however, visibly modify the storage that it allocates. Calls to aligned_alloc(), calloc(), free(), malloc(), posix_memalign(), reallocarray(), and realloc() that allocate or deallocate a particular region of memory shall occur in a single total order (see 4.15.1 Memory Ordering ), and each such deallocation call shall synchronize with the next allocation (if any) in this order.

RETURN VALUE

Upon successful completion, posix_memalign() shall return zero; otherwise, an error number shall be returned to indicate the error and the contents of memptr shall either be left unmodified or be set to a null pointer.

If size is 0, either:

ERRORS

The posix_memalign() function shall fail if:

[EINVAL]
The value of the alignment parameter is not a power of two multiple of sizeof(void *).
[ENOMEM]
There is insufficient memory available with the requested alignment.

The following sections are informative.

EXAMPLES

The following example shows how applications can obtain consistent behavior on error by setting *memptr to be a null pointer before calling posix_memalign().

void *ptr = NULL;
...
//do some work, which might goto error
if (posix_memalign(&ptr, align, size))
    goto error;

//do some more work, which might goto error ... error: free(ptr); //more cleanup;

APPLICATION USAGE

The posix_memalign() function is part of the Advisory Information option and need not be provided on all implementations.

RATIONALE

None.

FUTURE DIRECTIONS

None.

SEE ALSO

aligned_alloc , free , malloc

XBD <stdlib.h>

CHANGE HISTORY

First released in Issue 6. Derived from IEEE Std 1003.1d-1999.

In the SYNOPSIS, the inclusion of <sys/types.h> is no longer required.

Issue 7

Austin Group Interpretation 1003.1-2001 #058 is applied, clarifying the value of the alignment argument in the DESCRIPTION.

Austin Group Interpretation 1003.1-2001 #152 is applied, clarifying the behavior when the size of the space requested is 0.

POSIX.1-2008, Technical Corrigendum 2, XSH/TC2-2008/0251 [526] and XSH/TC2-2008/0252 [520,526] are applied.

Issue 8

Austin Group Defect 1302 is applied, aligning this function with the requirements of the ISO/IEC 9899:2018 standard on other memory allocation functions.

End of informative text.