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

Fab*_*tor 5 arrays fortran memory-management gfortran fortran90

两者之间有区别吗?

integer, intent(in) :: n
integer, dimension(:), allocatable :: a
allocate(a(n))
Run Code Online (Sandbox Code Playgroud)

integer, intent(in) :: n
integer, dimension(n) :: a
Run Code Online (Sandbox Code Playgroud)

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

fra*_*lus 7

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

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

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