Распределитель памяти GsvTinyAllocator

Последнее обновление: 10 марта 2005

Особенность распределителя TGsvTinyAllocator в том, что память только выделяется по частям, но освобождается сразу вся. Память от системы выделяется блоками, размер которых указывается в конструкторе. Выделенные блоки памяти связываются в односвязный список. В отдельный список связываются большие куски памяти. Большим куском считается кусок с размером, превышающим одну восьмую часть размера блока. Распределитель удобно применять для большого числа небольших кусочков памяти, например, для указателей связного списка или дерева. Кроме этого, можно применять распределитель для автоматического управления памятью, при котором элементы уничтожаются простым уничтожением распределителя - такая стратегия может существенно сэкономить память, уменьшить ее фрагментацию и ускорить время создания и уничтожения контейнеров, содержащих большое число мелких объектов.

Второй распределитель TGsvObjectAllocator выделяет память элементами фиксированной длины, но, в отличие от TGsvTinyAllocator, позволяет как распределять, так и возвращать распределенную память. Распределение памяти ведется блоками. Размер блока удваивается при исчерпании памяти в ранее выделенном блоке.

Оба распределителя существуют в двух вариантах - однопоточном и многопоточном.

Кроме распределителей, модуль имеет класс очереди, элементы которой распределяются с помощью распределителей. Элементом очереди может быть запись, первым членом которой должен быть заголовок типа TGsvObjectAllocatedItemHeader, например:

TMyItem = record
  Header: TGsvObjectAllocatedItemHeader;
  Others: ...;
end;

Очередь существует в однопоточном и многопоточном вариантах.

Download

Downloaddelphitinyallocator.zip - Исходные коды (3K).