一次元配列の制限はあるのでしょうか。87万個の数値をテキストに用意しておきそれを一
次元配列に確保させたいのですがエラーが生じてしまいます。
どなたかご教授していただけないでしょうか。
> 一次元配列の制限はあるのでしょうか。
あります。どうがんばっても搭載しているメモリの総量を超えることはできませんから。
> エラーが生じてしまいます。
どんなエラーですか?
どこにどの様に配列を確保しようとしているのでしょうか?
配列の要素のサイズは?VCのバージョンは?
VCでは、デフォルトのスタックサイズは1MBなので、
スタックに確保する場合はこれが制限になります。
(実際はスタック領域は配列のためだけにあるのではないので、
もっと小さい領域しか取れませんが)
スタックサイズはコンパイルオプションで変更できますが、
87万という要素数ならば、同時に全て配列に入れない方法を
考えるのが定石でしょう。
何の為に配列に確保したいのですか?
επιστημη さん ご助言有難うございます。
問題が発生したためこのプログラムを終了します。というエラーが生じます。
現マシン(メモリ512MB)
同ソースを別のマシン(メモリ1GB)でUNIXのGCCコンパイラを用いて実行しますとうまく
コンパイルできます。
> 問題が発生したためこのプログラムを終了します。というエラーが生じます。
おそらくメモリがパンクしたのでしょう。
全部メモリに置かずになんとかするからくりを考えるが吉かと。
>> 一次元配列の制限はあるのでしょうか。
> あります。どうがんばっても搭載しているメモリの総量を超えることはできませんから。
制限があるのは事実ですが、今時の Windows や UNIX なら搭載メモリの総量には依存しま
せん。例えば Win32 ならプロセスのメモリサイズの上限は 2GB です。
配列の要素のサイズにもよりますが、数十バイト×87万 = 数十メガバイト というドンブリ
計算をすれば、スタックに置くのは厳しいでしょうが、ヒーブには充分置けるサイズだと
思います。従って、オンメモリにしたいのなら、配列を動的にメモリ確保するとか、
std::vector を使えば行けるのではないかと思います。
87万件ものデータをメモリ上で扱うのは一般的ではないと思います。
ファイルなどに書き込み、少しずつメモリ上に読み込み処理するのが良いと
思います。
私も同じ経験が。
この場合、一次元でも二次元でも同じエラーです。
>全部メモリに置かずになんとかするからくりを考えるが吉かと。
それか、メモリを使わないアルゴリズムを考えるか。
何にせよ、何をしたいのかがわからなければ答えられないですが。
>少しずつメモリ上に読み込み処理するのが良い
でも、富豪プログラミングという考え方もありますね。
「そんなことは気にせず、わかりやすく書く」