【问题标题】:Fortran allocatable array lifetimeFortran 可分配数组生命周期
【发布时间】: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 会被分配两次吗? (我猜是)。如果每次调用都分配,那么第一次调用时分配的内存是否会空闲?

【问题讨论】:

    标签: memory-management fortran fortran90 dynamic-memory-allocation fortran95


    【解决方案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 标准的标签。
    猜你喜欢
    • 2019-09-03
    • 2020-03-17
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-18
    相关资源
    最近更新 更多