#pragma once #include #include #include template class FixedAllocator { private: PageAllocator page_allocator_; unsigned uint64_t page_size_; std::stack f_memory; std::unordered_set memory; public: explicit FixedAllocator(std::uint64_t page_size) : page_size_(page_size), page_allocator_(page_size * sizeof(Tp)) {} Tp* Allocate() { if (f_memory.empty()) { Tp* f_memory = reinterpret_cast(page_allocator_.Allocate()); for (unsigned uint64_t i = 0; i < page_size_; i++) { f_memory.push(f_memory + i); } } Tp* f_memory = f_memory.top(); f_memory.pop(); return f_memory; } void Deallocate(Tp* p) { f_memory.push(p); } const PageAllocator& InnerAllocator() { return page_allocator_; } };