Читайте также:
|
|
Распределяемые массивы могут быть в одном из двух статусов (состояний):
Статус массива может быть проверен с помощью встроенной логической функции ALLOCATED:
AllOCATED(имя)которая возвращает значение:
Например:
IF(ALLOCATED(x)) DEALLOCATE(x)или:
IF(.NOT. ALLOCATED(x)) ALLOCATE(x(1:10))По декларации статус распределяемого массива будет иметь значение 'не распределен в данный момент' и получит значение 'распределен' только после того как успешно будет выполнен оператор ALLOCATE. Как программа продолжится и память, использованная конкретным массивом, будет возвращена, так статус массива вернется к значению 'не распределен в данный момент '. Возможно повторять этот цикл распределения и возвращения памяти массиву (возможно с различным размером и протяженностью каждый раз) любое число раз в одной и той же программе.
Я
Потоки памяти (куча)
Естественно, существуют программы, которые берут память для распределения и возвращения разумно в соответствии со (статическими) переменными. Тем не менее, когда используются динамические массивы, это требует ответственности со стороны программиста.
Операторы, подобные ALLOCATE и DEALLOCATE очень мощные. Память, распределяемая с помощью оператора ALLOCATE, может быть получена обратно только с помощью:
Память, распределяемая для локальных переменных (в подпрограмме или функции), должна быть возвращена до выхода из процедуры. Когда при завершении процедуры удалены из памяти все локальные переменные и программа освобождает любую связанную память для использования чем-то иным. Тем не менее, любая память, связанная с помощью оператора ALLOCATE, будет оставаться "в пользовании" хотя она не имеет связанного имени переменной! Память, связанная, но не доступная более, не может быть освобождена и использована где-нибудь в другом месте в программе и о ней может быть сказано, что она в "неопределенном" состоянии. Такая ситуация приводит к уменьшению общей памяти, доступной для программы, ее называют "утечкой памяти".
Автоматические массивы a и b статические переменные - программа выделяет требуемую память, когда вызвана swap и возвращает память по выходу из процедуры. Память, выделенная для распределяемого массива work, должна быть явно возвращена в поток (кучу) памяти.
Потоки (куча) памяти совокупные. Повторное использование процедур, которые содержат поток (кучу) памяти, будет увеличивать размер распределенной, но не используемой, памяти. Потоки (куча) памяти могут иметь трудные ощибки соединения, но их можно избегнуть с помощью операций выделить и вернуть память в той же процедуре.
Я
Дата добавления: 2015-11-14; просмотров: 109 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Оператор OPEN | | | Присваивание указателя |