26 #include <unordered_map>
47 size_t total_allocations{0};
64 explicit MemoryPool(
size_t initial_pool_size = 400,
size_t max_pool_size = 2000);
73 std::unique_ptr<uint8_t[]> acquire(
size_t size);
74 std::unique_ptr<uint8_t[]> acquire(
BufferSize buffer_size);
75 void release(std::unique_ptr<uint8_t[]> buffer,
size_t size);
77 double get_hit_rate()
const;
78 void cleanup_old_buffers(std::chrono::milliseconds max_age = std::chrono::minutes(5));
79 std::pair<size_t, size_t> get_memory_usage()
const;
80 void resize_pool(
size_t new_size);
87 std::vector<std::unique_ptr<uint8_t[]>> buffers_;
88 mutable std::mutex mutex_;
92 PoolBucket() : size_{0}, capacity_{0} {}
93 PoolBucket(PoolBucket&& other) noexcept;
94 PoolBucket& operator=(PoolBucket&& other) noexcept;
95 PoolBucket(
const PoolBucket&) =
delete;
96 PoolBucket& operator=(
const PoolBucket&) =
delete;
99 std::array<PoolBucket, 4> buckets_;
102 std::atomic<size_t> total_allocations_{0};
103 std::atomic<size_t> pool_hits_{0};
106 PoolBucket& get_bucket(
size_t size);
107 size_t get_bucket_index(
size_t size)
const;
110 std::unique_ptr<uint8_t[]> acquire_from_bucket(PoolBucket& bucket);
111 std::unique_ptr<uint8_t[]> create_buffer(
size_t size);
114 void release_to_bucket(PoolBucket& bucket, std::unique_ptr<uint8_t[]> buffer);
117 void validate_size(
size_t size)
const;
132 return std::make_unique<MemoryPool>(800, 4000);
137 return std::make_unique<MemoryPool>(1200, 6000);
162 uint8_t* data()
const;
167 uint8_t& operator[](
size_t index);
168 const uint8_t& operator[](
size_t index)
const;
171 uint8_t& at(
size_t index);
172 const uint8_t& at(
size_t index)
const;
175 uint8_t*
get()
const {
return data(); }
176 explicit operator bool()
const {
return valid(); }
179 std::unique_ptr<uint8_t[]> buffer_;
184 void check_bounds(
size_t index)
const;
Global memory pool instance.
GlobalMemoryPool()=delete
static std::unique_ptr< MemoryPool > create_optimized()
static std::unique_ptr< MemoryPool > create_size_optimized()
static MemoryPool & instance()
GlobalMemoryPool & operator=(const GlobalMemoryPool &)=delete
GlobalMemoryPool(const GlobalMemoryPool &)=delete
Selective simplified memory pool with optimized performance.
MemoryPool(MemoryPool &&)=delete
MemoryPool & operator=(MemoryPool &&)=delete
MemoryPool & operator=(const MemoryPool &)=delete
MemoryPool(const MemoryPool &)=delete
RAII wrapper for memory pool buffers with enhanced safety.
PooledBuffer & operator=(const PooledBuffer &)=delete
PooledBuffer(const PooledBuffer &)=delete