Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы / Глава 2_Инф._структуры.doc
Скачиваний:
83
Добавлен:
15.02.2015
Размер:
1 Мб
Скачать
☆

2.6. Динамическое распределение памяти

Представление динамических массивов — частный случай динамического распределения памяти, когда несколько объектов (списков, массивов, файлов) могут независимо расти или уменьшаться в области общего пула памяти. Обычно элементы (узлы) этих объектов имеет разный размер, и желательны технологии для резервирования и освобождения блоков переменного размера в большой области памяти из последовательных ячеек.

Технология резервирования памяти. После нескольких актов занятия/освобождения ячеек в общем пуле памяти, последний, будучи изначально сплошным, приобретает «пунктирный» вид, когда по мере возрастания адресов свободные сплошные — не закрашенные — участки чередуются с занятыми, закрашенными (рис. 21). Технология резервирования в таком фрагментированном пуле должна решать две задачи:

(а) фиксация фрагментации пула в памяти компьютера;

(б) построение подходящего алгоритма поиска свободного блока из последовательных ячеек при заданном.

Рис. 21.

Задача (а) решается путём поддержания списка свободной памяти в определённом месте; чаще всего такой список содержится в том же общем пуле, подлежащем динамическому распределению. Первое слово каждой свободной области памяти содержит размер области и адрес первого слова следующей свободной области. Свободные области при адресации могут быть связаны в порядке возрастания или убывания размера, либо в порядке возрастания адресов, либо в произвольном порядке.

Алгоритм решения задачи (б): если необходима свободная область размера , то находится область, у которой размер, её размер уменьшается до, и соответствующим образом изменяется адрес новой, уменьшенной свободной области в согласии с принятым способом упорядочивания. Выбор свободной области размераможет осуществляться двумя наиболее распространёнными способами:

1) Метод наилучшего подходящего блока — выбирается блок с наименьшим допустимым размером . Это предполагает просмотр всего списка свободной памяти и соответствующих затрат машинного времени. Идеология метода — сохранение бóльших свободных областей «на потом», с целью уменьшения фрагментации общего пула памяти. Недостатком метода является тенденция к увеличению количества свободных блоков малого размера.

2) Метод первого подходящего блока — выбирается первый встретившийся в списке блок с допустимым размером .

Технология высвобождения памяти. Когда необходимость в выделенном блоке отпадает, он должен быть возвращён в список свободного пространства. Здесь обычно используются два подхода:

1) Сборка мусора — список свободного пространства не изменяется вплоть до тех пор, пока пул не окажется заполненным; после этого строится новый список.

Недостатком метода является тенденция к замедлению работы при почти заполненном пуле совместно используемой памяти. Кроме того, фактически освободившаяся, но неучтенная как свободная, область памяти, вынуждает алгоритм резервирования занимать часть свободной памяти в другом месте, увеличивая фрагментацию пула.

2) Уплотнение — немедленный возврат и слияние освобождённых областей. Все занятые блоки перемещаются в соседние позиции, после чего вся свободная область оказывается одним сплошным блоком.

Недостатком этой технологии является увеличение затрат времени на перемещение задействованных блоков и изменение указателей связи.

49