table of contents
        
      
      
    - Tumbleweed 2024.07.05-1.3
 - Leap-16.0
 - Leap-15.6
 
| std::aligned_alloc(3) | C++ Standard Libary | std::aligned_alloc(3) | 
NAME¶
std::aligned_alloc - std::aligned_alloc
Synopsis¶
 Defined in header <cstdlib>
  
   void* aligned_alloc( std::size_t alignment, std::size_t size ); (since
    C++17)
  
   Allocate size bytes of uninitialized storage whose alignment is specified by
  
   alignment (implicitly creating objects in the destination area). The size
    parameter
  
   must be an integral multiple of alignment.
  
   The following functions are required to be thread-safe:
  
   * The library versions of operator new and operator delete
  
   * User replacement versions of global operator new and operator delete
  
   * std::calloc, std::malloc, std::realloc, std::aligned_alloc, std::free
  
   Calls to these functions that allocate or deallocate a particular unit of
    storage
  
   occur in a single total order, and each such deallocation call happens-before
    the
  
   next allocation (if any) in this order.
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.
Return value¶
 On success, returns the pointer to the beginning of newly
    allocated memory. To avoid
  
   a memory leak, the returned pointer must be deallocated with std::free or
  
   std::realloc.
  
   On failure, returns a null pointer.
Notes¶
 Passing a size which is not an integral multiple of alignment or
    an alignment which
  
   is not valid or not supported by the implementation causes the function to
    fail and
  
   return a null pointer (C11, as published, specified undefined behavior in
    this case,
  
   this was corrected by DR460).
  
   As an example of the "supported by the implementation" requirement,
    POSIX function
  
   posix_memalign accepts any alignment that is a power of two and a multiple of
  
   sizeof(void*), and POSIX-based implementations of aligned_alloc inherit this
  
   requirements.
  
   Fundamental alignments are always supported. If alignment is a power of two
    and not
  
   greater than alignof(std::max_align_t), aligned_alloc may simply call
    std::malloc.
  
   Regular std::malloc aligns memory suitable for any object type with a
    fundamental
  
   alignment. This function is useful for over-aligned allocations, such as to
    SSE,
  
   cache line, or VM page boundary.
  
   This function is not supported in Microsoft C Runtime library because its
  
   implementation of std::free is unable to handle aligned allocations of any
    kind.
  
   Instead, MS CRT provides _aligned_malloc (to be freed with
  _aligned_free).
Example¶
// Run this code
  
   #include <cstdio>
  
   #include <cstdlib>
  
   int main()
  
   {
  
   int* p1 = static_cast<int*>(std::malloc(10 * sizeof *p1));
  
   std::printf("default-aligned address: %p\n",
    static_cast<void*>(p1));
  
   std::free(p1);
  
   int* p2 = static_cast<int*>(std::aligned_alloc(1024, 1024));
  
   std::printf("1024-byte aligned address: %p\n",
    static_cast<void*>(p2));
  
   std::free(p2);
  
   }
Possible output:¶
 default-aligned address: 0x2221c20
  
   1024-byte aligned address: 0x2222400
See also¶
 aligned_storage defines the type suitable for use as
    uninitialized
  
   (C++11)(deprecated in C++23) storage for types of given size
  
   (class template)
  
   C documentation for
  
   aligned_alloc
| 2024.06.10 | http://cppreference.com |