diff options
| author | Stefan Boberg <[email protected]> | 2021-09-30 10:38:18 +0200 |
|---|---|---|
| committer | Stefan Boberg <[email protected]> | 2021-09-30 10:38:39 +0200 |
| commit | d5f0bd35394198c8fd3452c29c16109e05209ae8 (patch) | |
| tree | 8691977fba045a097c0e04d2bf6203368c69fa65 /zencore/iobuffer.cpp | |
| parent | timer: Added Stopwatch::GetElapsedTIcks() and functions to convert ticks so M... (diff) | |
| download | zen-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.cpp | 37 |
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 {}; |