Fortran 可分配数组生命周期
Posted
技术标签:
【中文标题】Fortran 可分配数组生命周期【英文标题】:Fortran allocatable array lifetime 【发布时间】:2012-08-03 23:24:09 【问题描述】:假设我有以下代码:
program test
call foo
call foo
contains
subroutine foo
integer(8),dimension(:),allocatable:: var1
allocate(var1(10))
...
return
end subroutine foo
end
变量 var1 会被分配两次吗? (我猜是)。如果每次调用都分配,那么第一次调用时分配的内存是否会空闲?
【问题讨论】:
【参考方案1】:每次执行 ALLOCATE 语句时(即每次调用 foo 过程)都会(尝试)分配 var1。
根据 Fortran 90 的规则(仅),当过程结束时,foo 的分配状态变为未定义。具有未定义分配状态的变量将变得不可用 - 您不能在随后的过程调用中合法地重新分配。
在 Fortran 95 及更高版本中,因为它是一个本地的、未保存的变量,所以每次 foo 过程执行结束时都会释放 var1。
【讨论】:
在 Fortran 95 中添加了在退出过程时自动释放本地、未保存的可分配对象以避免内存泄漏。 fortran95?我正在使用fortran90。那么行为会改变吗? 在 Fortran 90 中不保证。什么编译器是 Fortran 90 但不兼容 Fortran 95? 如果在 double (Fortran 90) 中,您可以在过程末尾添加显式 deallocate 语句。 是的 - 我错过了 Fortran 90 标准的标签。以上是关于Fortran 可分配数组生命周期的主要内容,如果未能解决你的问题,请参考以下文章