Memory management Fortran可分配数组生存期
假设我有以下代码:Memory management Fortran可分配数组生存期,memory-management,fortran,fortran90,dynamic-memory-allocation,fortran95,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会被分配两次吗?(我想是的)。如果为每个调用分配了内存,那么在第一次调用期间分配的内存是否会变为可用内存?var1将
program test
call foo
call foo
contains
subroutine foo
integer(8),dimension(:),allocatable:: var1
allocate(var1(10))
...
return
end subroutine foo
end
变量var1会被分配两次吗?(我想是的)。如果为每个调用分配了内存,那么在第一次调用期间分配的内存是否会变为可用内存?var1将在每次执行ALLOCATE语句时(即每次调用foo过程时)分配
根据Fortran 90(仅限)的规则,当过程结束时,foo的分配状态变得未定义。具有未定义分配状态的变量将变得不可用-您不能在过程的后续调用中合法地重新分配
在Fortran 95及更高版本中,由于var1是一个本地的、未保存的变量,所以每次foo过程的执行结束时,var1都将被释放 Fortran 95中添加了在退出过程时自动释放本地未保存的可分配项,以避免内存泄漏。Fortran 95?我用的是fortran90。那么行为会改变吗?在Fortran 90中不能保证。什么编译器是Fortran 90而不是Fortran 95兼容的?如果是double(Fortran 90),您可以在过程结束时添加显式的释放语句。正确-我错过了Fortran 90标准的标记。