1

我正在编写一个使用 3 维数组的 Fortran77 程序。我将数组声明如下 Array_E(0:500,0:1000,0:100)。当我执行程序时,它会立即崩溃,说它被“杀死”了。当我运行 strace 时,我得到的是,

execve("./yee", ["./yee"], [/* 65 vars */] +++ 被 SIGKILL +++ 杀死

我怀疑问题是 g77 编译器无法为数组分配内存。实际上有九个这样的数组。在这种情况下,有没有办法在 f77 的堆栈上动态分配内存?如果这不是崩溃的原因,请告诉我您是否对此有任何想法。

4

1 回答 1

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/) 的一部分获得。

于 2010-11-07T16:38:27.743 回答