Cтраница 3
Необязательный ключевой параметр STAT содержит информацию о результате выполнения операции освобождения памяти. Параметр STAT должен быть переменной целого типа, не входящей в состав список выделенных объектов. Если освобождение памяти прошло успешно, переменная состояние принимает значение 0; если освободить память не удалось, то эта переменная принимает положительное значение При отсутствии параметра STAT неудача при освобождении памяти приводит к прекращению исполнения программы. [31]
Следовательно, в этом случае программист может управлять распределением и освобождением памяти. Память для переменной может быть выделена несколько раз подряд без освобождения перед каждым новым распределением. В этом случае значения переменной не теряются, а помещаются в стек. Однако в любой момент времени доступно только текущее значение переменной. BASED-память подобна CONTROLLED-памяти; только в ней в любой момент времени доступны для использования все размещения переменной. При каждом новом распределении памяти для переменной с атрибутом BASED соответствующая ей указательная переменная приравнивается к значению адреса отведенной памяти. Включая эту указательную переменную в ссылки к переменной с атрибутом BASED, программист может выбирать любой экземпляр этой переменной. Такая указательная переменная называется локатором. [32]
Теперь мы рассмотрим метод, который полностью устраняет поиск при освобождении памяти и который можно модифицировать, как в упр. [33]
На рис. 4.10 показано распределение памяти на отдельных этапах загрузки и освобождения памяти при выполнении сегментированной задачи, имеющей структуру, показанную на рис. 4.2. При этом учитывается, что сегменты 1, 2, 3 и 5 имеют динамические массивы, а в сегменте 4 такие массивы отсутствуют. Все сегменты используют индексные ячейки. [34]
Удаление указателя индекса означает удаление его из индексного множественного файла и освобождение занимаемой памяти. Перед выполнением команды DELETE TAG множественный индексный файл должен быть открытым, а удаляемый указатель индекса не должен быть управляющим. Если каталог открыт, то в нем отражаются соответствующие изменения. [35]
Для имитации действий по освобождению памяти в набор элементов сетей вводятся элементы освобождения памяти. При прохождении заявки, через элемент освобождения памяти, расположенный з некоторой точке маршрута заявки, сегмент памяти, ранее выделенный заявке, освобождается. При этом предполагается, что память всегда освобождается полным сегментом. Условное обозначение элементов освобождения памяти показано, на рис. 10.3, в. Описание элементов освобождения памяти задается следующим набором параметров: NAME1, NAME2, TYPE, где NAME1 - символическое имя элемента освобождения памяти; NAME2 - символическое имя памяти, которая должна быть освобождена; TYPE - тип заявки, освобождающей память. Параметр TYPE может повторяться требуемое число раз в соответствии с числом типов заявок, которые должны освобождать память при прохождении через элемент освобождения памяти. Прохождение через элемент освобождения памяти заявки, тип которой не указан в описании элемента, не вызывает каких-либо изменений в состоянии сети. [36]
Интересно проследить, как удаление дескрипторов доступа в системе i432 связано с освобождением памяти, занимаемой объектами. X, либо все дескрипторы доступа, указывающие на X, сами недостижимы. Объект Т2, показанный на рис. 4.2, был бы кандидатом для сбора мусора, если бы AD3 был единственным дескриптором доступа, указывающим на Т2, и на место AD3 записывается другой, возможно пустой, дескриптор доступа. В этой ситуации сборщик мусора системы 1432 в конце концов освободил бы место памяти, занимаемое Т2, и в результате получилась бы первоначальная структура, приведенная на рис. 4.1. [ Освобождается также память объектов, образующих между собой циклический список, хотя в этом случае на каждый объект показывает какой-то дескриптор доступа. [37]
Базированная память аналогична управляемой памяти: программист также полностью управляет распределением и освобождением памяти. В отличие от памяти класса CONTROLLED память класса BASED позволяет программисту выбирать любую переменную, опущенную в магазин, с помощью указателя переменной. [38]
Базированная память аналогична управляемой памяти: программист также полностью управляет распределением и освобождением памяти. [39]
Для освобождения памяти, отведенной под текущий экземпляр управляемой переменной, используется оператор освобождения памяти. [40]
Размер массива заранее берется с запасом, а указатель на него хранится для корректного освобождения памяти. [41]
Загруженный сегмент остается в памяти до тех пор, пока не выполнится оператор освобождения памяти сегмента. Последовательное использование операторов загрузки и освобождения памяти сегментов позволяет размещать на одном и том же месте памяти различные сегменты программы. [42]
Сборщик мусора - это часть CLR, которая выполняет автоматическое управление выделением и освобождением памяти. Когда не остается ни одной ссылки на объект, занимаемая им память освобождается. Эта же базовая идея лежит и в основе сборщика мусора CLR, однако сборщик мусора CLR является более совершенным механизмом. В частности, он может обнаружить ситуацию, когда два объекта ссылаются друг на друга, однако других ссылок на эти объекты не существует. [43]
Необходимость в куче и управлении ею возникает в тех языках, где выделение и освобождение памяти может потребоваться в произвольные моменты времени выполнения. Такой случай имеет место, если язык позволяет программисту создавать, уничтожать или расширять структуры данных в произвольных местах программы. [44]
Состояние переменных в процессе исполнения программы может меняться, - основной причиной этого является освобождение памяти при возврате управления, что происходит при выходе из подпрограмм. Если хотя бы один элемент массива становится неопределенным, в состоянии неопределенности оказывается весь массив. [45]