24 std::size_t blocks_per_chunk = 1024)
31 std::lock_guard<std::mutex> lock(
mutex_);
35 }
catch (
const std::bad_alloc&) {
41 throw std::runtime_error(
"Memory pool chunk allocation failed to create free list");
52 std::lock_guard<std::mutex> lock(
mutex_);
58 for (
const auto& chunk :
chunks_) {
59 std::uint8_t* chunk_start = chunk.get();
61 if (
reinterpret_cast<std::uint8_t*
>(p) >= chunk_start &&
62 reinterpret_cast<std::uint8_t*
>(p) < chunk_end) {
106 std::lock_guard<std::mutex> lock(
mutex_);
109 std::size_t free_count = 0;
113 current = *
reinterpret_cast<void**
>(current);
129 std::uint8_t* base = chunk.get();
130 chunks_.push_back(std::move(chunk));
142 std::vector<std::unique_ptr<std::uint8_t[]>>
chunks_;
fixed_block_pool(std::size_t block_size, std::size_t blocks_per_chunk=1024)
statistics get_statistics() const
Get current pool statistics.
std::size_t allocated_count_
void allocate_chunk_unlocked()
~fixed_block_pool()=default
std::size_t block_size() const noexcept
std::vector< std::unique_ptr< std::uint8_t[]> > chunks_
std::size_t blocks_per_chunk_
Statistics for monitoring memory pool usage.
double utilization_ratio() const
std::size_t memory_bytes() const
std::size_t total_capacity
std::size_t allocated_blocks