diff options
| author | Martin Ridgers <[email protected]> | 2021-09-09 13:35:53 +0200 |
|---|---|---|
| committer | Martin Ridgers <[email protected]> | 2021-09-14 14:29:27 +0200 |
| commit | 44a629fc9cf1158bab1b826b9279106cf5ab2924 (patch) | |
| tree | 8bc41c07639f72554f2c90fffb525393bc27287c /zencore/memory.cpp | |
| parent | ZEN_INLINE implementation for all supported toolchains (diff) | |
| download | zen-44a629fc9cf1158bab1b826b9279106cf5ab2924.tar.xz zen-44a629fc9cf1158bab1b826b9279106cf5ab2924.zip | |
Use std::aligned_alloc() instead of Intel's _mm_malloc
Diffstat (limited to 'zencore/memory.cpp')
| -rw-r--r-- | zencore/memory.cpp | 37 |
1 files changed, 31 insertions, 6 deletions
diff --git a/zencore/memory.cpp b/zencore/memory.cpp index 63d61f5e1..25a8d4761 100644 --- a/zencore/memory.cpp +++ b/zencore/memory.cpp @@ -10,6 +10,33 @@ namespace zen { ////////////////////////////////////////////////////////////////////////// +static void* AlignedAllocImpl(size_t size, size_t alignment) +{ +#if ZEN_PLATFORM_WINDOWS + // return _aligned_malloc(size, alignment); // MSVC alternative + return _mm_malloc(size, alignment); +#else + // posix_memalign(&Ret, Alignment, Size); // Apple, AndroidApi<28 + return std::aligned_alloc(alignment, size); +#endif +} + +void AlignedFreeImpl(void* ptr) +{ + if (ptr == nullptr) + return; + +#if ZEN_PLATFORM_WINDOWS + // _aligned_free(ptr); MSVC alternative + _mm_free(ptr); +#else + // free(ptr) // Apple :) + std::free(ptr); +#endif +} + +////////////////////////////////////////////////////////////////////////// + MemoryArena::MemoryArena() { } @@ -21,14 +48,13 @@ MemoryArena::~MemoryArena() void* MemoryArena::Alloc(size_t size, size_t alignment) { - return _mm_malloc(size, alignment); + return AlignedAllocImpl(size, alignment); } void MemoryArena::Free(void* ptr) { - if (ptr) - _mm_free(ptr); + AlignedFreeImpl(ptr); } ////////////////////////////////////////////////////////////////////////// @@ -36,14 +62,13 @@ MemoryArena::Free(void* ptr) void* Memory::Alloc(size_t size, size_t alignment) { - return _mm_malloc(size, alignment); + return AlignedAllocImpl(size, alignment); } void Memory::Free(void* ptr) { - if (ptr) - _mm_free(ptr); + AlignedFreeImpl(ptr); } ////////////////////////////////////////////////////////////////////////// |