我正在编写一个使用三维数组的Fortran77程序。我将数组声明为Array_E(0:500,0:1000,0:100)。当我执行这个程序时,它立即崩溃,说它被“杀死”了。当我运行strace的时候,我得到的是,
execve("./yee","./yee",/* 65 vars */ +++被SIGKILL +++杀死
我怀疑问题在于g77编译器无法为数组分配内存。事实上,有九个这样的数组。在这种情况下,有没有办法在f77中动态分配堆栈上的内存?如果这不是崩溃的原因,请让我知道如果你有任何想法。
发布于 2010-11-08 00:38:28
数组的大小约为50x10^6个条目,因此对于双精度而言,大小约为400 MBytes。9这样的数组将占用3.6 GBytes的内存,所以我假设您有足够的内存可用?
在Fortran 77中使用大型数组可能会有问题,因为它们不是动态分配的,而是放在堆栈上的。我不确定限制是什么,我猜这取决于操作系统和体系结构,但在32位系统上,使用堆栈上那么大的数组可能不起作用。你可以求助于fortran90的可分配数组,但是你必须使用gfortran而不是g77。
如果你需要严格的fortran77,你可以使用ma包,它可以作为全局数组工具包(http://www.emsl.pnl.gov/docs/global/)的一部分获得。
https://stackoverflow.com/questions/3834985
复制相似问题