27class TArenaAllocator {
34 for (
auto block : Pools_) {
35 ::operator
delete(block, std::align_val_t(
alignof(T)));
40 if (FreePages_.empty()) {
44 void* ret = FreePages_.top();
49 void Deallocate(
void* obj) {
55 return AllocatedObjects_;
60 char* pool =
static_cast<char*
>(::operator
new(PoolSize *
sizeof(T), std::align_val_t(
alignof(T))));
61 Pools_.emplace_back(pool);
62 for (
size_t i = 0; i < PoolSize; i++) {
63 FreePages_.push(&pool[i *
sizeof(T)]);
67 std::vector<char*> Pools_;
68 std::stack<void*, std::vector<void*>> FreePages_;
69 int AllocatedObjects_ = 0;