Cтраница 1
Список свободной памяти - это связный список из пустых ячеек; его головная ячейка называется головной ячейкой свободной памяти или ячейкой указателя на свободную память. Любая ячейка, удаленная из списка, добавляется в начало списка свободной памяти. Как только потребуется новая ячейка, она выбирается из начала этого списка, а пустой список обновляется, чтобы отразить это удаление - головная ячейка указывает на следующую свободную ячейку. [1]
Список свободной памяти справочника поддерживается в виде связного списка, который наполнен только связями. [2]
Использование списка свободной памяти, как это показано в разд. [3]
Несколько связных списков и список свободной памяти могут занимать одну и ту же область связного списка. Доступ к ячей-ке в любом из списков обычно возможен через его головную ячейку. [4]
![]() |
Файл двусвязного списка в основной памяти. [5] |
В ней расположены файл f и список свободной памяти S. На начало f и S указывают их головные ячейки. Интересно проследить, как распределяются файл ц список свободной памяти в области свободной памяти. [6]
Стандартная процедура dispose ( p) возвращает в список свободной памяти область, занимаемую р, оттуда она может быть затем снова забрана стандартной процедурой new. Эта процедура фактически превращает кучу во второй стек, которым в программе можно явно управлять. Процедура release изменяет лишь одно значение ( указателя кучи), поэтому она работает намного быстрее, чем процедура dispose, но по той же причине она и не столь полезна. Процедуры release и dispose несовместимы друг с другом, и их не следует совместно использовать в одной программе. [7]
Приведем пример программы обработки арифметических выражений, в которой используется список свободной памяти. [8]
Первой структурой системы ИПЛ-V, которую нам следует рассмотреть, является список свободной памяти, описанный в руководстве по ИПЛ-V следующим образом ( [116], стр. [9]
Чтобы закрепить изложенные идеи и разобраться в том, как составляется и используется список свободной памяти, обратимся снова к примеру 35-элементной памяти, который мы уже использовали выше ( стр. Конкретный выбор символов здесь снова произволен. Отметим, что определенные области, например Н - область, резервируются для интерпретирующей системы ИПЛ-V. Хотя сама Н - область может быть установлена в любом месте памяти, ее использование фиксировано. [10]
Чтобы поместить А1 в магазинный список, мы прежде всего фиксируем другую ячейку из списка свободной памяти и помещаем ее после начала списка, воспроизводя в этой следующей ячейке символ, стоящий в головной ячейке. Результат показан на фиг. Теперь мы можем ввести новый символ в А1, хотя мы при этом фактически переписываем и разрушаем предыдущий символ, поскольку копия этого предыдущего символа сохранена в списке. Отметим, что даже когда мы говорим о заимствовании ячеек из свободной памяти или о возвращении их в свободную память, в действительности ничего не меняется, кроме характера связей. Отметим, что все эти манипуляции выполняются автоматически интерпретатором ИПЛ-V: мы описываем здесь эти детали лишь для того, чтобы пояснить, как основные процессы осуществляют различного рода структурные изменения, которые нас интересуют. [11]
Этот способ повторного использования динамических переменных имеет совершенно очевидный недостаток: для каждого типа динамических переменных необходимо иметь свой список свободной памяти. [12]
![]() |
Файл множества связных списков с хешированием головных. [13] |
Как отмечалось выше, при интенсивных удалениях записей, располагаемых в связных списках, использование указателя на свободную память приводит к потере удаленных ячеек; использование же списка свободной памяти позволяет сохранить и повторно использовать эти ячейки. [14]
Реализовать процедуру для выделения блока свободной памяти заданного размера ( результатом работы процедуры должна быть - 1, если блок такого размера выделен быть не может) и процедуру для освобождения - повторного включения в список свободной памяти блока, выделенного ранее. [15]