Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/wolfpld/tracy.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBartosz Taudul <wolf.pld@gmail.com>2017-11-19 15:53:39 +0300
committerBartosz Taudul <wolf.pld@gmail.com>2017-11-19 15:53:39 +0300
commit08b8c6ec1b0553d6be3e6df1a689a67949647d83 (patch)
treed50dee52506025f401bc9334a74b4d17789715c3 /server/TracySlab.hpp
parentca5d35e6cd9e3841566ff2e3ce60834c40891ca9 (diff)
Optimize slab initializing allocation.
Diffstat (limited to 'server/TracySlab.hpp')
-rw-r--r--server/TracySlab.hpp14
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>