7 #if defined(__GLIBC__) && ((__GLIBC__ >= 2 && __GLIBC_MINOR__ >= 8) || __GLIBC__ > 2) && defined(__LP64__) 
    8 #define KTL_GLIBC_MALLOC_ALREADY_ALIGNED 1 
   10 #define KTL_GLIBC_MALLOC_ALREADY_ALIGNED 0 
   13 #if defined(__FreeBSD__) && !defined(__arm__) && !defined(__mips__) 
   14 #define KTL_FREEBSD_MALLOC_ALREADY_ALIGNED 1 
   16 #define KTL_FREEBSD_MALLOC_ALREADY_ALIGNED 0 
   19 #if (defined(__APPLE__) \ 
   21  || KTL_GLIBC_MALLOC_ALREADY_ALIGNED \ 
   22  || KTL_FREEBSD_MALLOC_ALREADY_ALIGNED) 
   23 #define KTL_HAS_MALLOC_ALIGNED 1 
   25 #define KTL_HAS_MALLOC_ALIGNED 0 
   30 #if ((defined __QNXNTO__) || (defined _GNU_SOURCE) || ((defined _XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600))) \ 
   31  && (defined _POSIX_ADVISORY_INFO) && (_POSIX_ADVISORY_INFO > 0) 
   32 #define KTL_HAS_POSIX_MEMALIGN 1 
   34 #define KTL_HAS_POSIX_MEMALIGN 0 
   40 #define KTL_HAS_MM_MALLOC 1 
   42 #define KTL_HAS_MM_MALLOC 0 
   50 #if KTL_HAS_MALLOC_ALIGNED 
   52 #elif KTL_HAS_MM_MALLOC 
   53         return _mm_malloc(size, alignment);
 
   54 #elif KTL_HAS_POSIX_MEMALIGN 
   56         const int failed = posix_memalign(&res, size, alignment);
 
   57         if (failed) res = 
nullptr;
 
   59 #elif defined(_MSC_VER) 
   60         return _aligned_malloc(size, alignment);
 
   63         void* ptr = malloc(size + alignment);
 
   66             res = 
reinterpret_cast<void*
>((
reinterpret_cast<size_t>(ptr) & ~(
size_t(alignment - 1))) + alignment);
 
   67             *(
reinterpret_cast<void**
>(res) - 1) = ptr;
 
   75 #if KTL_HAS_MALLOC_ALIGNED 
   77 #elif KTL_HAS_MM_MALLOC 
   79 #elif KTL_HAS_POSIX_MEMALIGN 
   81 #elif defined(_MSC_VER) 
   85             free(*(
reinterpret_cast<void**
>(ptr) - 1));
 
   89     template<
typename T, 
typename... Args>
 
   91         noexcept(noexcept(T(std::declval<Args>()...)))
 
   94         ::new(p) T(std::forward<Args>(args)...);
 
  100         noexcept(noexcept(p->~T()))
 
Definition: fallback_fwd.h:23
void * aligned_malloc(size_t size, size_t alignment) noexcept
Definition: aligned_malloc.h:48
void aligned_delete(T *p) noexcept(noexcept(p->~T()))
Definition: aligned_malloc.h:99
void aligned_free(void *ptr) noexcept
Definition: aligned_malloc.h:73
T * aligned_new(size_t alignment, Args &&... args) noexcept(noexcept(T(std::declval< Args >()...)))
Definition: aligned_malloc.h:90