欢迎所有平台,请指定您的答案平台.
一个类似的问题:如何以编程方式获取C++中的CPU缓存页面大小?
有没有办法在堆栈中的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构造中完成的.