#pragma once #include template class FixedAllocator { PageAllocator page_allocator_; public: FixedAllocator(std::uint64_t page_size) : page_allocator_(PageAllocator(page_size)), page_size(page_size) {}; Tp *Allocate() { if (this->pages.empty()) { Tp *tmp1 = static_cast(this->page_allocator_.Allocate()); for (uint64_t i = 0; i < this->page_size; ++i) { this->pages.push_back(++tmp1); } } Tp *tmp2 = this->pages.back(); this->pages.pop_back(); return tmp2; }; void Deallocate(Tp *p) { this->pages.push_back(p); }; const PageAllocator &InnerAllocator() const noexcept { return this->page_allocator_; }; private: std::uint64_t page_size{}; std::vector pages{}; };