【问题标题】:Fortran 90 Differences in declaring allocatable arrayFortran 90 声明可分配数组的区别
【发布时间】:2014-06-21 02:11:32
【问题描述】:

有没有区别

integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))

integer, intent(in) :: n
integer, dimension(n) :: a

在什么情况下我们会使用第一个版本? 也许我误解了可分配数组,第二个版本甚至是可分配数组吗?

【问题讨论】:

    标签: arrays memory-management fortran fortran90 gfortran


    【解决方案1】:

    第二种情况确实没有a 可分配的。然而,它是一个自动对象。

    忽略实现级别内存使用的实际差异,存在很大差异。是的,每个a 都是(假设问题中没有明确说明)一个局部变量,在allocate 和自动创建之后,大小为n,但在第一种情况下它是可分配的。它可以被解除分配、重新分配(可能是不同的大小),然后再次解除分配。以此类推。

    自动对象(第二种情况)不能。

    【讨论】:

    • 这假设 a 不是像 n 这样的虚拟参数,但如果它仍然成立。
    【解决方案2】:

    第一种情况是可分配数组。数组中元素的数量可以在运行时在任何范围内动态分配或重新分配。

    第二种情况是由虚拟参数定义的固定数量元素的自动数组。它的大小只能在调用它的过程中根据虚拟参数中传递的大小进行本地更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2014-07-28
      • 2011-09-24
      • 2020-08-29
      • 2012-07-17
      • 1970-01-01
      相关资源
      最近更新 更多