Задача D. FixedAllocator

Входной файл:Стандартный вход   Ограничение времени: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_)

Выделять память можно только с помощью данного объекта

Материалы задачи

main.cpp

Формат выходных данных

Файл с решением должен содержать только реализацию класса FixedAllocator


0.215s 0.121s 17