相关疑难解决方法(0)

168
推荐指数
7
解决办法
7万
查看次数

Fortran中的可变大小数组,没有Allocate()

有没有办法在堆栈中的Fortran中创建可变大小的数组?Allocate()对我不起作用,因为它将数组放在堆上.这可能会导致并行化问题(请参阅我的另一个问题: OpenMP:堆数组性能不佳(堆栈数组工作正常)).当然,一些智能内存管理会解决这个问题,但Fortran中的内存管理听起来很愚蠢.

基本上,我在C中寻找与以下相同的Fortran:

scanf("%d", N);
int myarray[N];
Run Code Online (Sandbox Code Playgroud)

重新迭代:我不想要

Integer, PARAMETER :: N=100
Integer, Dimension(N) :: myarray
Run Code Online (Sandbox Code Playgroud)

因为这决定了编译时的数组大小.我也不想要

Integer, Dimension(:), Allocatable :: myarray
read(*,*) N
Allocate(myarray(1:N))
Run Code Online (Sandbox Code Playgroud)

因为它将数组放在堆上.

非常感谢帮助.在我最近遇到上述问题中的问题之前,我对Allocatable阵列非常满意.如果对这个问题有一个否定的答案,我非常感谢与该来源的链接.

编辑:查看对MSB答案的评论.这样做的优雅方式只有在Fortran 2008中才有可能实现,并且它是在一个block构造中完成的.

memory arrays heap stack fortran

12
推荐指数
2
解决办法
2万
查看次数