mirror of
https://github.com/wolfpld/tracy.git
synced 2024-09-20 05:42:18 +00:00
Don't allocate unneeded memory.
This commit is contained in:
parent
5da8a7aa9b
commit
3a60a28a71
@ -2,6 +2,7 @@
|
|||||||
#define __TRACYEVENT_HPP__
|
#define __TRACYEVENT_HPP__
|
||||||
|
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "TracyVector.hpp"
|
#include "TracyVector.hpp"
|
||||||
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user