2012-02-23 21 views
0

ここでは少し問題がありますが、配列を作成するのにC++コードを書いていますが、配列サイズを100,000,000以上に設定したい場合はエラーが発生します。C++の制限を超えるサイズの配列を作成する方法

これは私のコードです:

int i=0; 
double *a = new double[n*n]; 

この部分は私のプロジェクトのために非常に重要です。

+1

どのようなエラーが表示されますか? –

+0

@タルニコラス:どうすれば助けになるのですか? –

+4

エラーは何ですか?そして、そのコードに含まれるはずの 'n 'の値は何ですか? – Useless

答えて

1

一般に、失敗する唯一の理由は、メモリ/メモリの断片化/使用可能なアドレス空間の不足によるものです。つまり、800MBのメモリを割り当てようとしています。確かに、あなたのシステムの仮想メモリがそれを処理できない理由はわかりませんが、多分あなたは他のものを割り当てていました。それは問題ではありません。

代わりに、明示的なCスタイルの配列ではなく、メモリマップファイル、スパース配列などのトリックを使用することができます。

+0

私はこのコード行に到着する前に私のプログラムに他のものを少なくとも1.2 GBのメモリを使用しています。 – user506938

+0

次に、64ビットOSが必要です。 – MSalters

0

メモリが不足している場合は、ファイルを使用してデータを保存し、それを小さな塊で処理する必要があります。

IMSLが探しているものを提供しているかどうかわかりませんが、小さなチャンクで作業したい場合は、これらの小さなチャンクでIMSL関数を呼び出して後で結果をマージするアルゴリズムを考案するかもしれません。たとえば、部分行列の乗算を組み合わせて行列乗算を行うことができます。

+0

私はこの配列がIMSL関数に渡されるのに必要です。 – user506938

+0

答えを – perreal

1

あなたは100,000,000要素の配列を必要とする考えるときは、何が実際必要性は、おそらく前のことを聞いたことがない別のデータ構造です。たぶん、ハッシュマップ、またはおそらく疎な行列。

あなたが解決しようとしている実際の問題について詳しくお知りになりたい場合は、より良いヘルプを提供することができます。

+0

私はこの説明が有用であるかどうかは分かりませんが、このコードはFEM(有限要素法)ソルバの一部です。私はIMSLの数学ライブラリを使用して、方程式の線形システムを解きます。私はこのサイズのネイティブ配列が必要です – user506938

関連する問題