1

配列を作成しようとしています: int HR[32487834]; これは約 128 - 130 メガバイトのメモリしか占有しませんか? MS c++ Visual Studios 2005 SP1 を使用していますが、クラッシュし、スタック オーバーフローが通知されます。

4

3 に答える 3

11

ベクトルを使用 - 配列データはヒープ上に配置されますが、関数またはブロックを離れると、配列は自動的にクリーンアップされます。

std::vector<int> HR( 32487834);
于 2009-08-01T19:03:03.050 に答える
7

あなたのコンピュータにはギガバイトのメモリがあるかもしれませんが、スタックにはありません (デフォルトでは、Windows では ~1 MB だと思いますが、それを大きくすることができます)。

でヒープに割り当ててみてくださいnew []

于 2009-08-01T18:41:09.740 に答える
3

デフォルトでは、スタックはそれほど大きくありません。/F コンパイラ スイッチでスタック サイズを設定できます。

このオプションを指定しない場合、スタック サイズはデフォルトで 1 MB になります。number 引数は、10 進数または C 言語表記にすることができます。引数の範囲は、1 からリンカーが受け入れる最大スタック サイズまでです。リンカーは、指定された値を最も近い 4 バイトに切り上げます。/F と数値の間のスペースはオプションです。

実行可能ファイルに/STACK リンカー オプションを使用することもできます

しかし、すべてを一度に行うのではなく、問題をいくつかの部分に分割する必要があります。一度にすべてのメモリが本当に必要ですか?

通常、スタックよりもヒープに多くのメモリを割り当てることもできます。

于 2009-08-01T18:44:54.740 に答える