diff options
author | Bartosz Taudul <wolf.pld@gmail.com> | 2017-11-19 15:53:39 +0300 |
---|---|---|
committer | Bartosz Taudul <wolf.pld@gmail.com> | 2017-11-19 15:53:39 +0300 |
commit | 08b8c6ec1b0553d6be3e6df1a689a67949647d83 (patch) | |
tree | d50dee52506025f401bc9334a74b4d17789715c3 /server/TracySlab.hpp | |
parent | ca5d35e6cd9e3841566ff2e3ce60834c40891ca9 (diff) |
Optimize slab initializing allocation.
Diffstat (limited to 'server/TracySlab.hpp')
-rw-r--r-- | server/TracySlab.hpp | 14 |
1 files changed, 13 insertions, 1 deletions
diff --git a/server/TracySlab.hpp b/server/TracySlab.hpp index 5dd0b2bf..2b1c7d4a 100644 --- a/server/TracySlab.hpp +++ b/server/TracySlab.hpp @@ -48,7 +48,19 @@ public: template<typename T> T* AllocInit() { - return new( AllocRaw( sizeof( T ) ) ) T; + const auto size = sizeof( T ); + assert( size <= BlockSize ); + if( m_offset + size > BlockSize ) + { + m_ptr = new char[BlockSize]; + m_offset = 0; + m_buffer.emplace_back( m_ptr ); + memUsage.fetch_add( BlockSize, std::memory_order_relaxed ); + } + void* ret = m_ptr + m_offset; + new( ret ) T; + m_offset += size; + return (T*)ret; } template<typename T> |