我正在编写一个使用三维数组的Fortran77程序。 我声明数组如下Array_E(0:500,0:1000,0:100)。当我执行该程序时,它立即崩溃说它被“杀死”。 当我跑过strace时,我得到的是,
execve(“./ yee”,[“。/ yee”],[/ * 65 vars * /] +++被SIGKILL +++杀死
我怀疑问题是g77编译器无法为阵列分配内存。实际上有九个这样的阵列。在这种情况下有没有办法在f77中动态分配堆栈中的内存? 如果这不是坠机原因,请告诉我您是否对此有所了解。
答案 0 :(得分:3)
数组大小约为50x10 ^ 6个条目,因此大小约为400 MB,用于双精度。 9个这样的阵列将占用3.6 GB的内存,所以我假设你有足够的内存可供开始使用?
在Fortran 77中使用大型数组可能会有问题,因为它们不是动态分配的,而是放在堆栈上。我不确定限制是什么,我想这取决于操作系统和体系结构,但在32位系统上,它可能无法使用堆栈上那么大的数组。您可以使用Fortran 90的可分配数组,但是您必须使用gfortran而不是g77。
如果你需要坚持严格的fortran 77,你可以使用ma包作为全局数组工具包(http://www.emsl.pnl.gov/docs/global/)的一部分。< / p>