Fortran可分配的数组生命周期

时间:2012-08-07 00:06:36

标签: 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会被分配两次吗? (我猜是)。如果为每个呼叫分配,第一次呼叫期间分配的内存是否会空闲?

1 个答案:

答案 0 :(得分:6)

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

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

在Fortran 95及更高版本中,因为它是一个本地的,未保存的变量,所以每次执行foo过程结束时都会释放var1。