2010-09-30 77 views
1

我正在编写一个使用3维数组的Fortran77程序。 我声明的数组如下Array_E(0:500,0:1000,0:100)。当我执行程序时,它立即崩溃,说它已被“杀死”。 当我跑strace的,我得到的是,fortran77中的动态内存分配

的execve( “./饴”,[ “./yee”],[/ * 65个*瓦尔/] +++通过SIGKILL +++

打死

我怀疑问题是g77编译器不能为数组分配内存,实际上有9个这样的数组,在这种情况下,有一种方法可以在f77中动态分配堆栈中的内存吗? If这不是崩溃的原因,请让我知道,如果你有任何想法。

+0

为什么你在F77中编写它有些超出我的想法......为什么你要求在30年前的语言标准中使用当今语言的特性,甚至更进一步。 – Rook 2010-10-01 01:50:07

+0

,因为OP还必须知道f77/f90仍然是用于处理数字的最佳大锤。 – 2016-02-04 07:14:47

回答

3

数组大小约为50x10^6条目,所以大约400MBytes大小的双精度。增加3.6 GB的内存,所以我假设你有足够的内存可用于开始?

在Fortran 77中使用大型数组可能会产生问题,因为它们不是动态分配的,而是放在堆栈上。我不确定是什么限制,我想这取决于操作系统和体系结构,但在32位系统上,它可能无法使用堆栈中较大的数组。你可以使用Fortran 90的可分配数组,但是你必须使用gfortran而不是g77。

如果你需要坚持严格的fortran 77,你可以使用ma包,它可以作为全局数组工具包(http://www.emsl.pnl.gov/docs/global/)的一部分获得。

+0

这个GA lib在osx上是一个强硬的buld,它是一个很重的lib,有很多mpi的开销,但它似乎可以处理巨大的f77矩阵 – 2016-02-04 07:13:33