From 47f6c8d06b2c8525a99a7d227a2efdf7398b5ddb Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Fri, 15 Sep 2017 19:41:09 +0200 Subject: [PATCH] Add slab allocator. --- server/TracySlab.hpp | 77 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100755 server/TracySlab.hpp diff --git a/server/TracySlab.hpp b/server/TracySlab.hpp new file mode 100755 index 00000000..b13bae09 --- /dev/null +++ b/server/TracySlab.hpp @@ -0,0 +1,77 @@ +#ifndef __TRACYSLAB_HPP__ +#define __TRACYSLAB_HPP__ + +#include +#include + +namespace tracy +{ + +template +class Slab +{ +public: + Slab() + : m_ptr( new char[BlockSize] ) + , m_buffer( { m_ptr } ) + , m_offset( 0 ) + {} + + ~Slab() + { + for( auto& v : m_buffer ) + { + delete[] v; + } + } + + void* Alloc( size_t size ) + { + assert( size <= BlockSize ); + if( m_offset + size > BlockSize ) + { + m_ptr = new char[BlockSize]; + m_offset = 0; + m_buffer.emplace_back( m_ptr ); + } + void* ret = m_ptr + m_offset; + m_offset += size; + return ret; + } + + void Unalloc( size_t size ) + { + assert( size <= m_offset ); + m_offset -= size; + } + + void Reset() + { + if( m_buffer.size() > 1 ) + { + for( int i=1; i m_buffer; +}; + +} + +#endif