aboutsummaryrefslogtreecommitdiff
path: root/zencore/iobuffer.cpp
diff options
context:
space:
mode:
authorStefan Boberg <[email protected]>2021-09-30 10:38:18 +0200
committerStefan Boberg <[email protected]>2021-09-30 10:38:39 +0200
commitd5f0bd35394198c8fd3452c29c16109e05209ae8 (patch)
tree8691977fba045a097c0e04d2bf6203368c69fa65 /zencore/iobuffer.cpp
parenttimer: Added Stopwatch::GetElapsedTIcks() and functions to convert ticks so M... (diff)
downloadzen-d5f0bd35394198c8fd3452c29c16109e05209ae8.tar.xz
zen-d5f0bd35394198c8fd3452c29c16109e05209ae8.zip
memory: Added experimental mimalloc path to AlignedAllocImpl/AlignedFreeImpl
Also added similar path to IoBuffer Cannot be enabled at the moment as we end up passing pointers to std::free via some path so more work will be necessary
Diffstat (limited to 'zencore/iobuffer.cpp')
-rw-r--r--zencore/iobuffer.cpp37
1 files changed, 28 insertions, 9 deletions
diff --git a/zencore/iobuffer.cpp b/zencore/iobuffer.cpp
index a730a316f..244425761 100644
--- a/zencore/iobuffer.cpp
+++ b/zencore/iobuffer.cpp
@@ -14,6 +14,10 @@
#include <memory.h>
#include <system_error>
+#if ZEN_USE_MIMALLOC
+# include <mimalloc.h>
+#endif
+
#if ZEN_PLATFORM_WINDOWS
# include <atlfile.h>
#else
@@ -36,26 +40,41 @@ IoBufferCore::AllocateBuffer(size_t InSize, size_t Alignment)
m_Flags |= kLowLevelAlloc;
return VirtualAlloc(nullptr, InSize, MEM_COMMIT, PAGE_READWRITE);
}
- else
#endif // ZEN_PLATFORM_WINDOWS
- {
- return Memory::Alloc(InSize, Alignment);
- }
+
+#if ZEN_USE_MIMALLOC && 0
+ void* Ptr = mi_aligned_alloc(Alignment, RoundUp(InSize, Alignment));
+#else
+ void* Ptr = Memory::Alloc(InSize, Alignment);
+#endif
+
+ ZEN_ASSERT(Ptr);
+
+ return Ptr;
}
void
IoBufferCore::FreeBuffer()
{
+ if (!m_DataPtr)
+ {
+ return;
+ }
+
#if ZEN_PLATFORM_WINDOWS
if (m_Flags & kLowLevelAlloc)
{
VirtualFree(const_cast<void*>(m_DataPtr), 0, MEM_DECOMMIT);
+
+ return;
}
- else
#endif // ZEN_PLATFORM_WINDOWS
- {
- return Memory::Free(const_cast<void*>(m_DataPtr));
- }
+
+#if ZEN_USE_MIMALLOC && 0
+ return mi_free(const_cast<void*>(m_DataPtr));
+#else
+ return Memory::Free(const_cast<void*>(m_DataPtr));
+#endif
}
//////////////////////////////////////////////////////////////////////////
@@ -436,7 +455,7 @@ IoBufferBuilder::MakeFromTemporaryFile(const path_char_t* FileName)
Handle = DataFile.Detach();
#else
- int Fd = open(FileName, O_RDONLY);
+ int Fd = open(FileName, O_RDONLY);
if (Fd < 0)
{
return {};