在 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 数组将自动释放。
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 数组将自动释放。