33#include "memory/heap_allocator.hpp"
42 PoolAllocator(size_t blockCount)
43 : _blockSize(
sizeof(T)), _blockCount(blockCount), _pool(
nullptr), _freeBlocks(blockCount) {
44 auto* poolData = HeapAllocator::get_instance()->allocate<uint8_t>(blockCount);
45 _pool =
reinterpret_cast<
void*>(poolData);
46 for (size_t i = 0; i < blockCount; ++i) {
47 _freeBlocks[i] = (T*)((uint8_t*)_pool + i * _blockSize);
58 if (
ensure(!_freeBlocks.empty())) {
59 void* ptr = _freeBlocks.back();
61 _freeBlocks.pop_back();
68 void deallocate(T* ptr) {
70 _freeBlocks.push_back(ptr);
77 std::vector<
void*> _freeBlocks;
Definition pool_allocator.hpp:37
#define ensure(condition)
Definition kn_assert.hpp:43