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