fortran77中的动态内存分配

fortran77中的动态内存分配,fortran77,Fortran77,我正在写一个使用三维数组的Fortran77程序。 我声明数组如下array_E(0:500,0:1000,0:100)。当我执行该程序时,它会立即崩溃,并说它已被“杀死”。 当我跑strace的时候我得到的是 execve(“./yee”、[”/yee”]、[/*65变量*/] +++被西格基尔杀死+++ 我怀疑问题是g77编译器无法为数组分配内存。事实上,有九个这样的数组。在这种情况下,有没有办法在f77的堆栈上动态分配内存? 如果这不是导致崩溃的原因,请告诉我您是否对此有任何想法。阵列大小

我正在写一个使用三维数组的Fortran77程序。 我声明数组如下array_E(0:500,0:1000,0:100)。当我执行该程序时,它会立即崩溃,并说它已被“杀死”。 当我跑strace的时候我得到的是

execve(“./yee”、[”/yee”]、[/*65变量*/] +++被西格基尔杀死+++

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

阵列大小约为50x10^6个条目,因此双精度大约为400 MB。9此类阵列将占用3.6 GB内存,因此我假设您有足够的可用内存开始

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


如果您需要坚持使用严格的fortran 77,可以使用ma包,该包可以作为global arrays toolkit的一部分获得(http://www.emsl.pnl.gov/docs/global/).

我不明白你为什么要用F77编写它……而你为什么要在一个30年的语言标准中要求当今语言的功能,这一点更进一步。因为OP还必须知道F77/f90仍然是处理数字的最好的大锤。这个GA库在osx上是一个艰难的构建,它是一个沉重的库,有很多mpi开销,但是它似乎可以处理巨大的f77矩阵