Memory management Fortran可分配数组生存期

Memory management Fortran可分配数组生存期,memory-management,fortran,fortran90,dynamic-memory-allocation,fortran95,Memory Management,Fortran,Fortran90,Dynamic Memory Allocation,Fortran95,假设我有以下代码: program test call foo call foo contains subroutine foo integer(8),dimension(:),allocatable:: var1 allocate(var1(10)) ... return end subroutine foo end 变量var1会被分配两次吗?(我想是的)。如果为每个调用分配了内存,那么在第一次调用期间分配的内存是否会变为可用内存?var1将

假设我有以下代码:

program test
  call foo
  call foo
contains
  subroutine foo
    integer(8),dimension(:),allocatable:: var1
    allocate(var1(10))
    ...
    return
  end subroutine foo
end
变量var1会被分配两次吗?(我想是的)。如果为每个调用分配了内存,那么在第一次调用期间分配的内存是否会变为可用内存?

var1将在每次执行ALLOCATE语句时(即每次调用foo过程时)分配

根据Fortran 90(仅限)的规则,当过程结束时,foo的分配状态变得未定义。具有未定义分配状态的变量将变得不可用-您不能在过程的后续调用中合法地重新分配


在Fortran 95及更高版本中,由于var1是一个本地的、未保存的变量,所以每次foo过程的执行结束时,var1都将被释放

Fortran 95中添加了在退出过程时自动释放本地未保存的可分配项,以避免内存泄漏。Fortran 95?我用的是fortran90。那么行为会改变吗?在Fortran 90中不能保证。什么编译器是Fortran 90而不是Fortran 95兼容的?如果是double(Fortran 90),您可以在过程结束时添加显式的释放语句。正确-我错过了Fortran 90标准的标记。