Don't allocate unneeded memory.

This commit is contained in:
Bartosz Taudul 2017-11-15 21:26:58 +01:00
parent 5da8a7aa9b
commit 3a60a28a71
2 changed files with 20 additions and 7 deletions

View File

@ -2,6 +2,7 @@
#define __TRACYEVENT_HPP__ #define __TRACYEVENT_HPP__
#include <limits> #include <limits>
#include <string.h>
#include "TracyVector.hpp" #include "TracyVector.hpp"

View File

@ -22,11 +22,10 @@ public:
using iterator = T*; using iterator = T*;
Vector() Vector()
: m_ptr( new T[1] ) : m_ptr( nullptr )
, m_size( 0 ) , m_size( 0 )
, m_capacity( 0 ) , m_capacity( 0 )
{ {
memUsage.fetch_add( sizeof( T ), std::memory_order_relaxed );
} }
Vector( const Vector& ) = delete; Vector( const Vector& ) = delete;
@ -150,7 +149,7 @@ public:
void reserve( size_t cap ) void reserve( size_t cap )
{ {
if( cap <= Capacity() ) return; if( cap == 0 || cap <= Capacity() ) return;
cap--; cap--;
cap |= cap >> 1; cap |= cap >> 1;
cap |= cap >> 2; cap |= cap >> 2;
@ -170,15 +169,23 @@ public:
private: private:
void AllocMore() void AllocMore()
{
if( m_ptr == nullptr )
{
memUsage.fetch_add( sizeof( T ), std::memory_order_relaxed );
m_ptr = new T[1];
}
else
{ {
memUsage.fetch_add( Capacity() * sizeof( T ), std::memory_order_relaxed ); memUsage.fetch_add( Capacity() * sizeof( T ), std::memory_order_relaxed );
m_capacity++; m_capacity++;
Realloc(); Realloc();
} }
}
void Realloc() void Realloc()
{ {
T* ptr = new T[Capacity()]; T* ptr = new T[CapacityNew()];
if( m_size != 0 ) if( m_size != 0 )
{ {
memcpy( ptr, m_ptr, m_size * sizeof( T ) ); memcpy( ptr, m_ptr, m_size * sizeof( T ) );
@ -188,6 +195,11 @@ private:
} }
uint32_t Capacity() const uint32_t Capacity() const
{
return m_ptr == nullptr ? 0 : 1 << m_capacity;
}
uint32_t CapacityNew() const
{ {
return 1 << m_capacity; return 1 << m_capacity;
} }