#pragma once template class FixedAllocator { public: explicit FixedAllocator(std::uint64_t page_size) : page_size(page_size), page_allocator(page_size) {} Tp *Allocate() { if (memory.empty()) { Tp *t = static_cast(page_allocator.Allocate()); for (size_t i = 0; i < page_size; ++i) { t += i; memory.push_back(t); } } Tp *result = memory.back(); memory.erase(memory.end() - 1); return result; } void Deallocate(Tp *p) { memory.push_back(p); } const PageAllocator &InnerAllocator() const noexcept { return page_allocator; } private: PageAllocator page_allocator; size_t page_size; std::vector memory; };