Cтраница 4
Язык Ада предоставляет в распоряжение программиста средства для управления выделением памяти из кучи и возвращением в кучу освободившейся памяти ( см. разд. Ада [4]), но у автора нет абсолютной уверенности в том, что из текста стандарта на язык Ада [4] следует, что сформулированное в предыдущем предложении требование выполняется. С другой стороны, автор вынужден признать, что он не в состоянии доказать, что это требование не выполняется в языке Ада. [46]
Это означает, что все действия, связанные с выделением памяти и ее последующим освобождением, должны явно проводиться самим программистом с сопутствующим этому риском возникновения фатальной ошибки, например, при отсутствии свободной памяти. Для этих целей в распоряжении программиста имеются стандартные процедуры new и dispose. При этом, если освобожденная с помощью стандартной процедуры dispose память выделяется для повторного использования с помощью процедуры new, возникает опасность, связанная с сохранением значения указателя на эту область памяти, оставшегося от ее предыдущего использования. Это может привести к очень трудно диагностируемым и непредсказуемым взаимодействиям по общим данным между различными, не связанными ( логически) друг с другом частями программы. Если же освобождаемая с помощью стандартной процедуры dispose память не поступает в пул для повторного использования ( с помощью стандартной процедуры new), то теряется смысл использования стандартной процедуры dispose. Причем в этом случае любая сколько-нибудь серьезная попытка организовать работу со списками, скорее всего, обречена на провал из-за быстрого исчерпания памяти, так как отсутствует возможность ее повторного использования. [47]
Как уже отмечалось выше, если объект класса Counter требует выделения памяти, необходимо заместить конструктор-копировщик. Но в данном случае конструктор-копировщик, заданный по умолчанию, отлично справляется со своими задачами. [48]
Схема программы, содержащей указание об эквивалентности переменных А к В, позволяющее их разместить в одной ячейке памяти без разрушения информации. Справа указаны маршруты переменных А и В. [49] |
На рис. 5.5.1 показан пример блочной записи программы и порядок выделения памяти в управляющей ЦВМ для блоков. Как видно, для переменных блока 1, как самого внешнего, выделена память, ни с чем не совмещаемая. [50]
Необязательный ключевой параметр STAT содержит информацию о результате выполнения операции выделения памяти. Параметр STAT должен быть переменной целого типа, не входящей в состав выделяемых объектов. Если выделение прошло успешно, переменная состояние принимает значение 0; если выделить память не удалось, то эта переменная принимает положительное значение. [51]
Однако соответствующие элементы матрицы автоматически вызывают генерацию кодов, служащих для выделения памяти во время счета задачи. [52]
Типы прерываний. [53] |
Если в списке свободных сегментов требуемого размера не оказалось, то выделение памяти делается за счет откачки. При этом набирается группа смежных свободных и занятых нерезидентных сегментов. Суммарный размер этой группы должен быть больше требуемого или равен ему. Делается попытка программно переместить информацию занятых сегментов в другие места ОП либо откачать информацию из них во внешнюю память. [54]
Второй способ динамического выделения памяти связан с применением процедур GetMem для выделения памяти и FreeMem для ее освобождения. [55]
AUTOMATIC), указанные в атрибуте значения присваиваются каждый раз при выделении памяти. [56]
Если в операторе JOB указан параметр REGION, то указание о выделении памяти для пункта задания игнорируется. [57]