diff options
| author | Stefan Boberg <[email protected]> | 2021-09-15 19:49:20 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-15 19:49:20 +0200 |
| commit | 83ccd52321a23c8f1c8a3228cbbf34b8f199a22b (patch) | |
| tree | 9cf1fb68651f616aef2fa28000e4f328ef9204d8 /zencore/memory.cpp | |
| parent | Added GetSize/GetData functions to reduce cognitive load and bridge the gap b... (diff) | |
| parent | Tweaked logging to streamline access, and simplified setup code for new loggers (diff) | |
| download | zen-83ccd52321a23c8f1c8a3228cbbf34b8f199a22b.tar.xz zen-83ccd52321a23c8f1c8a3228cbbf34b8f199a22b.zip | |
Merge branch 'main' into cbpackage-update
Diffstat (limited to 'zencore/memory.cpp')
| -rw-r--r-- | zencore/memory.cpp | 44 |
1 files changed, 37 insertions, 7 deletions
diff --git a/zencore/memory.cpp b/zencore/memory.cpp index 63d61f5e1..9c7fb8333 100644 --- a/zencore/memory.cpp +++ b/zencore/memory.cpp @@ -1,15 +1,47 @@ // Copyright Epic Games, Inc. All Rights Reserved. -#include <malloc.h> #include <zencore/intmath.h> #include <zencore/memory.h> +#ifdef ZEN_PLATFORM_WINDOWS +# include <malloc.h> +#else +# include <cstdlib> +#endif + #include <doctest/doctest.h> 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 +53,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 +67,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); } ////////////////////////////////////////////////////////////////////////// |