From 5b48f33a819df1df29924627eb106344ddd8b989 Mon Sep 17 00:00:00 2001 From: Christopher Dykes Date: Mon, 21 Mar 2016 15:05:49 -0700 Subject: [PATCH] Add Windows support to portability/Memory.h Summary: This adds Windows support to portability/Memory.h and also does some refactoring to be more correct about when to use posix_memalign, and also changes it to fall back to memalign rather than posix_memalign. Reviewed By: mzlee Differential Revision: D3069990 fb-gh-sync-id: 88861583c6028e9fb02a3e3804bd6d476956c555 shipit-source-id: 88861583c6028e9fb02a3e3804bd6d476956c555 --- folly/portability/Memory.cpp | 44 ++++++++++++++++++++++-------------- folly/portability/Memory.h | 4 +--- 2 files changed, 28 insertions(+), 20 deletions(-) diff --git a/folly/portability/Memory.cpp b/folly/portability/Memory.cpp index f57086af..3310c0d2 100644 --- a/folly/portability/Memory.cpp +++ b/folly/portability/Memory.cpp @@ -16,26 +16,15 @@ #include -#include -#include - -#ifdef __ANDROID__ -#include -#endif +#include namespace folly { namespace detail { +#if _POSIX_C_SOURCE >= 200112L || _XOPEN_SOURCE >= 600 || \ + (defined(__ANDROID__) && (__ANDROID_API__ > 15)) +#include -#if defined(__ANDROID__) && (__ANDROID_API__ <= 15) - -void* aligned_malloc(size_t size, size_t align) { - return memalign(align, size); -} - -void aligned_free(void* aligned_ptr) { free(aligned_ptr); } - -#else -// Use poxis_memalign, but mimic the behavior of memalign +// Use posix_memalign, but mimic the behaviour of memalign void* aligned_malloc(size_t size, size_t align) { void* ptr = nullptr; int rc = posix_memalign(&ptr, align, size); @@ -46,8 +35,29 @@ void* aligned_malloc(size_t size, size_t align) { return nullptr; } -void aligned_free(void* aligned_ptr) { free(aligned_ptr); } +void aligned_free(void* aligned_ptr) { + free(aligned_ptr); +} +#elif defined(_WIN32) +#include // nolint +void* aligned_malloc(size_t size, size_t align) { + return _aligned_malloc(size, alignment); +} + +void aligned_free(void* aligned_ptr) { + _aligned_free(aligned_ptr); +} +#else +#include // nolint + +void* aligned_malloc(size_t size, size_t align) { + return memalign(align, size); +} + +void aligned_free(void* aligned_ptr) { + free(aligned_ptr); +} #endif } } diff --git a/folly/portability/Memory.h b/folly/portability/Memory.h index f46e9cea..c9d4f1e0 100644 --- a/folly/portability/Memory.h +++ b/folly/portability/Memory.h @@ -16,13 +16,11 @@ #pragma once -#include +#include namespace folly { namespace detail { - void* aligned_malloc(size_t size, size_t align); - void aligned_free(void* aligned_ptr); } } -- 2.34.1