Fortran 90声明可分配数组的差异

时间:2014-06-21 02:11:33

标签: arrays memory-management fortran fortran90 gfortran

之间有区别吗?
integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))

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

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

2 个答案:

答案 0 :(得分:6)

第二种情况确实没有a可分配。但是,它是自动对象。

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

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

答案 1 :(得分:1)

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

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