1

3 次元配列を使用する Fortran77 プログラムを作成しています。次のように配列を宣言しています Array_E(0:500,0:1000,0:100)。プログラムを実行すると、「殺された」と言って即座にクラッシュします。strace を実行すると、

execve("./yee", ["./yee"], [/* 65 変数 */] +++ SIGKILL によって殺される +++

問題は、g77 コンパイラが配列にメモリを割り当てることができないことだと思われます。実際、そのような配列は 9 つあります。このような場合、f77 でスタックにメモリを動的に割り当てる方法はありますか? これがクラッシュの原因でない場合は、ご意見がありましたらお知らせください。

4

1 に答える 1

3

配列のサイズは約 50x10^6 エントリなので、倍精度のサイズは約 400 MB です。このような配列が 9 個あると 3.6 GB のメモリが必要になるため、最初から十分なメモリを使用できると思いますか?

Fortran 77 で大きな配列を使用すると、動的に割り当てられずにスタックに置かれるため、問題が発生する可能性があります。制限が何であるかはわかりません。オペレーティング システムとアーキテクチャに依存すると思いますが、32 ビット システムでは、スタック上でそれほど大きな配列を使用することはおそらく機能しません。Fortran 90 の割り当て可能な配列に頼ることもできますが、g77 の代わりに gfortran を使用する必要があります。

厳密な fortran 77 に固執する必要がある場合は、グローバル配列ツールキット (http://www.emsl.pnl.gov/docs/global/) の一部として入手できる ma パッケージを使用できます。

于 2010-11-07T16:38:27.743 に答える