在 Fortran 中恢复不可分配的大型数组的存储

Recover storage of NON-allocatable large arrays in Fortran

deallocate 语句用于恢复不再需要的可分配数组的存储。 不可分配的数组呢?假设(在主要且唯一的程序中)有一个像

这样的声明
INTEGER, DIMENSION(100,100) :: A

这个数组只用了一次就不再用了。如果我想让它 space 免费怎么办?

您给出的示例不是一个可分配数组,而是一个简单的静态数组,它只存在于创建它的范围内。一旦变量超出范围,分配给静态数组的内存通常会被释放,但这取决于其他情况,比如它是否被隐式保存等。

要成为可分配数组,它的声明中必须包含 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 数组将自动释放。