2009-08-01 18 views
1

アレイを作成しようとしています: int HR[32487834]; これは約128 - 130メガバイトのメモリを占有しませんか? 私はMS C++ビジュアルスタジオ2005 SP1を使用していますが、クラッシュしてスタックのオーバーフローを通知します。C++メモリ割り当ての質問

+0

は、あなたが希望いかなる理由があります。 STL配列(vector、list ...)を使用する代わりに配列を使用しますか?独自のイテレータクラスを作成することもできます。 – Partial

答えて

7

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

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

+1

いいえ。ヒープに割り当てられるRAIIクラスを使用しますが、定義された有効期間を持ち、例外的に安全です。 std :: vector

+0

なぜスタックはデフォルトで〜1MBしかないのですか?私は新しい演算子を使っていました。なぜスタックにではなくヒープ上に割り当てることができますか? – TheFuzz

+0

@Martin York:ベクトルを使用すると役立ちます! – Partial

3

スタックはデフォルトではそれほど大きくありません。スタックサイズは/F compiler switchで設定できます。

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

使用することもできます実行ファイル

しかし、おそらくあなたの代わりに、一度にすべてをやっの部分にあなたの問題を分割する必要があるため/STACK linker option。あなたは一度にそのすべての記憶を本当に必要としますか?

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

+0

スタックサイズだけでなく、スタックフレームのサイズもこれらの巨大なサイズで動作します(DevStudioのスタックフレームの制限はわかりませんが)。 –

11

は、ベクターを使用してください - あなたは関数やブロックを離れるとき、あなたはまだ配列が自動的にクリーンアップを得るよながら配列データは、ヒープ上に配置されます:

std::vector<int> HR(32487834); 
+1

その奇妙な宇宙大会の理由は何ですか? (申し訳ありませんが、それは私の目を滲ませて、私はそれの目的について興味があります。) – Zifre

+1

(x)は空白があまりにも多く、(x)は十分ではありません。 –

関連する問題