aboutsummaryrefslogtreecommitdiff
path: root/zencore/memory.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-15 19:49:20 +0200
committerStefan Boberg <[email protected]>2021-09-15 19:49:20 +0200
commit83ccd52321a23c8f1c8a3228cbbf34b8f199a22b (patch)
tree9cf1fb68651f616aef2fa28000e4f328ef9204d8 /zencore/memory.cpp
parentAdded GetSize/GetData functions to reduce cognitive load and bridge the gap b... (diff)
parentTweaked logging to streamline access, and simplified setup code for new loggers (diff)
downloadzen-83ccd52321a23c8f1c8a3228cbbf34b8f199a22b.tar.xz
zen-83ccd52321a23c8f1c8a3228cbbf34b8f199a22b.zip
Merge branch 'main' into cbpackage-update
Diffstat (limited to 'zencore/memory.cpp')
-rw-r--r--zencore/memory.cpp44
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);
}
//////////////////////////////////////////////////////////////////////////