2017-03-16 8 views
0

83000行と83000列の行列を宣言する必要があります。 私は次の形式でそれを宣言する:MinGWの32ビットからのgfortranによってコードのgfortranで大きな行列を割り当てるときに整数オーバーフローが発生する

double precision,allocatable :: MAT(:,:) 
allocate(MAT(83000,83000)) 

コンパイルが成功しているが、私は* .exeのを実行すると、私は次のエラーが表示されます

integer overflow when calculating the amount of memory to allocate 

マトリックスの寸法を変更すると、つまり(nrow=100,ncol=100)がすべて動作するため、コードは正しいようです。

私の質問は、寸法が大きいときに行列を宣言するにはどうすればいいですか?

+0

83000 * 83000が最大32ビット整数値2147483648を超えています。これがオーバーフローの理由で、要素の数が多すぎます。ただし、コンピュータでオーバーフローが発生しない場合は、サイズに64バイトの整数が使用されます。あなたのWindowsとgfortranについてもっと教えてください。 32ビットまたは64ビット?どのバージョン?どのようにコンパイルしますか? –

+0

とにかく、システムやコンパイラが32ビットである場合は、とにかくあまりにも多くのメモリを要求するよりも、 –

+0

あなたの答えは@VladimirF thxですが、私はCodeBlocks環境(Windows 7 64ビット)でMinGW(したがってgfortran 32bit)を使用します。問題を解決するにはどうしたらいいですか?あなたはコンパイラの使用を推奨していますか? – plus91

答えて

2

32ビットコンパイラは、このような大きな配列を扱うことはできません。 83000 * 83000が最大32ビットの整数値2147483648より大きいため、配列のサイズを計算することはできません。 64ビットコンパイラを使用する必要があります。 (このオーバーフローは、デフォルト設定のAllocate large array in PGI Fortranの一部の64ビットコンパイラでも発生する可能性がありますが、gfortranは問題ありません。)32ビットプロセスで扱えるメモリの最大量をはるかに上回っています。

+0

64ビットコンパイラ、SilverFrost FTN95 64ビットでコンパイルしましたが、同じエラーが発生しました.... – plus91

+0

どちらか正確**エラー?上記の私のノートとリンクをリンクすると、大きな配列を有効にするために特別なフラグが必要なコンパイラがあります。 –

+0

これは私がコンパイルウィッヒと手順です: ます。http://それ私がlol.exe exuteしようとすると、 FTN95 file.f90/64 SLINK64 file.obj /file:lol.exe 、私は次のエラーを取得します。 tinypic.com/r/2vdim1e/9 – plus91

関連する問題