-
Notifications
You must be signed in to change notification settings - Fork 228
ДЗ Аллокатор
xphoenix edited this page Sep 13, 2017
·
1 revision
Интерфейс аллокатора находиться в include/allocator:
- Error.h - исключение, которое должен бросать аллокатор при возникновении ошибок, например когда больше нет памяти. Сюда можно добавлять новые типы ошибок, если нужно
- Pointer.h - интерфейс "умного" указателя, которые возвращает аллокатор. Фактически, это обертка над указателем нужная для поддержки дефрагментации
- Simple.h - интерфейс простого аллокатора
Аллокатору отдается блок памяти (base) заданного размера (len) под управление:
Simple(char *base, size_t len)
В рамках этого блока, аллокатор реализует следующие операции:
- Выделить кусок памяти запрошенного размера. Если это невозможно, запрошенно больше чем есть свободной памяти, то бросить исключение. Если памяти достаточно, но она фрагментированна - выполнить дефрагментацию и потом выделить
- Изменить размер выделенной ранее области, уменьшить или увеличить. При этом нужно, по возможности, избегать копирования блоков памяти.
- Освободить ранее выделенную область памяти
- Дефрагментировать весь управляемый блок памяти
Нужно написать реализацию аллокатора по любой из схем, которые обсуждали на лекции (или любой другой, которая уместится в заданный интерфейс), при этом:
- В реализации можно использовать только память, выданнуюю аллокатору для управления
- Стэк
Реализация должна распологаться в src/allocator/{Pointer.cpp, Simple.cpp, ...}.
Тесты находятся в test/allocator и собираются в цель runAllocatorTests:
[user@domain build] make runAllocatorTests
[user@domain build] ./test/allocator/runAllocatorTests