##### cppreference.com

##### Search

Create account

##### Namespaces

- Page
- Discussion

##### Variants

##### Views

- View
- Edit
- History

##### Actions

# aligned_alloc

From cppreference.com
< c‎ | memory

Defined in header `<stdlib.h>` |  |
void *aligned_alloc( size_t alignment, size_t size ); |  | (since C11)

Allocate `size` bytes of uninitialized storage whose alignment is specified by `alignment`. The `size` parameter must be an integral multiple of `alignment`.

`aligned_alloc` is thread-safe: it behaves as though only accessing the memory locations visible through its argument, and not any static storage.

A previous call to free or realloc that deallocates a region of memory synchronizes-with a call to aligned_alloc that allocates the same or a part of the same region of memory. This synchronization occurs after any access to the memory by the deallocating function and before any access to the memory by `aligned_alloc`

### [edit] Parameters

alignment | - | specifies the alignment. Must be a valid alignment supported by the implementation.
size | - | number of bytes to allocate. An integral multiple of `alignment`

### [edit] Return value

Either a null pointer or a pointer to the allocated memory. The pointer must be deallocated with free().

### [edit] Notes

Passing a `size` which is not an integral multiple of `alignment` or a `alignment` which is not valid or not supported by the implementation is undefined behavior.

E.g., the glibc requires `alignment` to be a power of two and a multiple of `sizeof(void *)`.

### [edit] References

- C11 standard (ISO/IEC 9899:2011):

  - 7.22.3.1 Memory management functions

### [edit] See also

C++ documentation for aligned storage

Retrieved from "http://en.cppreference.com/mwiki/index.php?title=c/memory/aligned_alloc&oldid=71402"