aboutsummaryrefslogtreecommitdiff
path: root/zencore/memory.cpp
diff options
context:
space:
mode:
authorMartin Ridgers <[email protected]>2021-09-09 13:35:53 +0200
committerMartin Ridgers <[email protected]>2021-09-14 14:29:27 +0200
commit44a629fc9cf1158bab1b826b9279106cf5ab2924 (patch)
tree8bc41c07639f72554f2c90fffb525393bc27287c /zencore/memory.cpp
parentZEN_INLINE implementation for all supported toolchains (diff)
downloadzen-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.cpp37
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);
}
//////////////////////////////////////////////////////////////////////////