Входной файл: | Стандартный вход | Ограничение времени: | 2 сек | |
Выходной файл: | Стандартный выход | Ограничение памяти: | 128 Мб |
Конструктор класса PageAllocator
принимает размер блока в байтах
Функция Allocate
выделяет блок размера, заданного в конструкторе
Данный класс реализовывать не нужно
class PageAllocator {
public:
explicit PageAllocator(std::uint64_t page_size);
void* Allocate();
};
Необходимо реализовать класс FixedAllocator
, у которого должны быть:
Конструктор принимающий page_size
— размер блока в элементах типа Tp
Функция Allocate
возвращающая указатель на следующую свободную память
Если свободной памяти нет функция Allocate
получает ее через объект page_allocator_
Функция Deallocate
добавляющая указатель обратно в пул свободной памяти
Функция InnerAllocator
возвращающая неизменяемую ссылку на объект page_allocator_
template<typename Tp>
class FixedAllocator {
PageAllocator page_allocator_;
public:
explicit FixedAllocator(std::uint64_t page_size);
Tp* Allocate();
void Deallocate(Tp* p);
const PageAllocator& InnerAllocator() const noexcept;
};
Таким образом вы должны выделять минимально возможное кол-во блоков памяти (кол-во вывозов Allocate
у объекта page_allocator_
)
Выделять память можно только с помощью данного объекта
Файл с решением должен содержать только реализацию класса FixedAllocator