Восстановите хранилище неразмещаемых больших массивов в Фортране

Оператор deallocate используется для восстановления хранилища выделяемого массива, который больше не нужен. А как насчет неразмещаемых массивов? Предположим (в основной и единственной программе) есть объявление, подобное

INTEGER, DIMENSION(100,100) :: A

Этот массив используется один раз и не более. Что если я захочу освободить место?

1 ответ

Решение

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

Чтобы быть размещаемым массивом, он должен иметь ALLOCATABLE в своем объявлении. Кроме того, вам нужно выделить это.

Смысл распределенных массивов в том, что FORTRAN будет управлять освобождением для вас.

Как только массив выйдет из области видимости, Fortran освободит его для вас. Таким образом, нет риска утечки памяти с этим массивом.

Пример адаптирован из http://www.fortran90.org/src/best-practices.html

subroutine do_something
    real(dp), allocatable :: lam
    allocate(lam(5))
    ...
end subroutine do_something

В конце процедуры массив lam будет автоматически освобожден.

Другие вопросы по тегам