電子書籍の厳選無料作品が豊富!

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

A 回答 (3件)

2,000,000×2,000,000×4バイトで、約16TB(= 16,000GB)のメモリが必要になる計算です。


32ビットOSでは到底扱えませんし、64ビット版のWindowsでも現状では無理です (64ビット版Windowsの1プロセスあたりの仮想アドレス空間は8TBまで)。
計算のやり方を根本的に変えるしかありません。
    • good
    • 0

>大きな2次元配列



どのくらいの大きさですか?

この回答への補足

実行環境
 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次元配列を確保する方法を教えてください。

補足日時:2010/05/15 15:56
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!