Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Статус распределяемых массивов

Уровни доступа | Спецификация входных-выходных параметров | Использование модуля | Внутренние процедуры | Связь с хозяином (Host) - глобальные данные | Объекты допустимого образа | Процедуры в качестве параметров | Родовые подпрограммы | Вещественные - форма с фиксированной точкой | Ввод-вывод без продвижения |


Читайте также:
  1. IV. НЕЗАВИСИМОСТЬ УЛУСА ДЖУЧИ И ИЗМЕНЕНИЯ В ЕГО СТАТУСЕ
  2. Адміністративно-політичний статус України у складі Російської та Австро-Угорської імперій у ХІХ ст.
  3. Активность персонала в зависимости от статуса работника
  4. Астматический статус.
  5. Вибір методу державного управління залежить від характе­ристики керованого об'єкта (форма власності, адміністративно-правовий статус тощо).
  6. Влияние конвертируемых облигаций на статус обыкновенных акций
  7. ВНИМАНИЕ: статус Mini получает 50% от шага

Распределяемые массивы могут быть в одном из двух статусов (состояний):

 

Статус массива может быть проверен с помощью встроенной логической функции ALLOCATED:

AllOCATED(имя)

которая возвращает значение:

Например:

IF(ALLOCATED(x)) DEALLOCATE(x)

или:

IF(.NOT. ALLOCATED(x)) ALLOCATE(x(1:10))

По декларации статус распределяемого массива будет иметь значение 'не распределен в данный момент' и получит значение 'распределен' только после того как успешно будет выполнен оператор ALLOCATE. Как программа продолжится и память, использованная конкретным массивом, будет возвращена, так статус массива вернется к значению 'не распределен в данный момент '. Возможно повторять этот цикл распределения и возвращения памяти массиву (возможно с различным размером и протяженностью каждый раз) любое число раз в одной и той же программе.

Я

Потоки памяти (куча)

Естественно, существуют программы, которые берут память для распределения и возвращения разумно в соответствии со (статическими) переменными. Тем не менее, когда используются динамические массивы, это требует ответственности со стороны программиста.

Операторы, подобные ALLOCATE и DEALLOCATE очень мощные. Память, распределяемая с помощью оператора ALLOCATE, может быть получена обратно только с помощью:

Память, распределяемая для локальных переменных (в подпрограмме или функции), должна быть возвращена до выхода из процедуры. Когда при завершении процедуры удалены из памяти все локальные переменные и программа освобождает любую связанную память для использования чем-то иным. Тем не менее, любая память, связанная с помощью оператора ALLOCATE, будет оставаться "в пользовании" хотя она не имеет связанного имени переменной! Память, связанная, но не доступная более, не может быть освобождена и использована где-нибудь в другом месте в программе и о ней может быть сказано, что она в "неопределенном" состоянии. Такая ситуация приводит к уменьшению общей памяти, доступной для программы, ее называют "утечкой памяти".

SUBROUTINE swap(a, b) REAL, DIMENSION(:):: a, b REAL, ALLOCATABLE:: work(:) ALLOCATE(work(SIZE(a))) work = a a = b b = work DEALLOCATE(work)! необходимо END SUBROUTINE swap

Автоматические массивы a и b статические переменные - программа выделяет требуемую память, когда вызвана swap и возвращает память по выходу из процедуры. Память, выделенная для распределяемого массива work, должна быть явно возвращена в поток (кучу) памяти.

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

Я


Дата добавления: 2015-11-14; просмотров: 109 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Оператор OPEN| Присваивание указателя

mybiblioteka.su - 2015-2024 год. (0.006 сек.)