• ベストアンサー

2次元配列を確保したいのですが、

2次元配列を確保したいのですが、 size of array 'buf' is too large というエラーで確保できません。 mallocを使って確保しようとしましたが、コンパイルできましたが、 実行するとメモリ確保に失敗します。 大きな2次元配列を確保する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • salsberry
  • ベストアンサー率69% (495/711)
回答No.3

2,000,000×2,000,000×4バイトで、約16TB(= 16,000GB)のメモリが必要になる計算です。 32ビットOSでは到底扱えませんし、64ビット版のWindowsでも現状では無理です (64ビット版Windowsの1プロセスあたりの仮想アドレス空間は8TBまで)。 計算のやり方を根本的に変えるしかありません。

その他の回答 (2)

  • asuncion
  • ベストアンサー率33% (2127/6289)
回答No.2

>大きな2次元配列 どのくらいの大きさですか?

staoywa
質問者

補足

実行環境  Windows Vista(32ビット)  メモリ 4GB  MinGW gcc 配列計算するプログラムです。プログラムは、省略します。 1 普通に配列を宣言すると「size of array 'buf' is too large」と表示して、コンパイルできない。 #define SIZE 2000000 float buf1[SIZE][SIZE]; float buf2[SIZE][SIZE]; int i; int j; 省略 for(i=0;i<SIZE;i++) { for(j=0;j<SIZE;j++) {   buf1[i][j] = buf1[i][j] * buf2[i][j];  } } 2 また、mallocを使う方法は、以下です。   この方法は、コンパイルできますが、実行時に「メモリを確保できませんでした。」と表示します。 #define SIZE 2000000 float **buf1; float **buf2; int i; int j; 省略 buf1 = (float**)malloc(sizeof(float*)*SIZE); for(i=0;i<SIZE;i++) { buf1[i] = (float*)malloc(sizeof(float)*SIZE); if(buf1[i] == NULL) { printf("メモリを確保できませんでした。\n"); } } buf2 = (float**)malloc(sizeof(float*)); for(i=0;i<SIZE;i++) { buf2[i] = (float*)malloc(sizeof(float)*SIZE); if(buf2[i] == NULL) { printf("メモリを確保できませんでした。\n"); } } 大きな2次元配列を確保する方法を教えてください。

  • hitomura
  • ベストアンサー率48% (325/664)
回答No.1

すみませんが、開発環境とうまくいかないコードを書いていただけないでしょうか。