From 8fd685c877ba2e07312bee4059fa3791db008bbf Mon Sep 17 00:00:00 2001 From: Bartosz Taudul Date: Fri, 15 Feb 2019 02:28:31 +0100 Subject: [PATCH] Properly track memory usage in slab allocator. --- server/TracySlab.hpp | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/server/TracySlab.hpp b/server/TracySlab.hpp index 1d7dca09..01c9cb02 100644 --- a/server/TracySlab.hpp +++ b/server/TracySlab.hpp @@ -17,13 +17,14 @@ public: : m_ptr( new char[BlockSize] ) , m_offset( 0 ) , m_buffer( { m_ptr } ) + , m_usage( BlockSize ) { memUsage.fetch_add( BlockSize, std::memory_order_relaxed ); } ~Slab() { - memUsage.fetch_sub( BlockSize * m_buffer.size(), std::memory_order_relaxed ); + memUsage.fetch_sub( m_usage, std::memory_order_relaxed ); for( auto& v : m_buffer ) { delete[] v; @@ -93,6 +94,7 @@ public: else { memUsage.fetch_add( size ); + m_usage += size; auto ret = new char[size]; m_buffer.emplace_back( ret ); return ret; @@ -103,7 +105,8 @@ public: { if( m_buffer.size() > 1 ) { - memUsage.fetch_sub( BlockSize * ( m_buffer.size() - 1 ), std::memory_order_relaxed ); + memUsage.fetch_sub( m_usage - BlockSize, std::memory_order_relaxed ); + m_usage = BlockSize; for( int i=1; i m_buffer; + size_t m_usage; }; }