4

現在、さまざまな場所にメモリを割り当てるプログラムを書いています。ヒープがメモリ不足になったとき、つまり malloc() が NULL を返したとき、プログラムがどのように動作するかを知りたいです。

何が起こるかをすぐに確認できるように、ヒープ サイズを非常に小さいサイズに設定できるコンパイラ オプションはありますか? gcc コンパイラを使用しています。

4

4 に答える 4

3

次のようにスタックとヒープのサイズを指定できます。

gcc -Wl,--stack=xxxxx -Wl,--heap=yyyyy ...
于 2013-03-31T17:49:07.960 に答える
2

少なくとも Linux ではulimit -m <max mem>、プログラムを実行する前に使用できます。

于 2013-03-31T17:44:53.687 に答える
1

32 ビットとしてコンパイルし、大量のメモリを予約して仮想アドレス空間を使い果たします (コミットする必要はありません。予約するだけです (これらは Windows の用語であり、Linux に相当するものがあると確信しています)。

Windows には、メモリを制限するために使用できるジョブ オブジェクトもありますが、単純なVirtualAlloc手法でうまくいく可能性があります。

これの良いところは、おそらくタイマーを使用して制限を動的に変更し、ランダムな時間に何度も何度もプログラムにストレスを与えることができることです。

于 2013-03-31T17:45:11.673 に答える
1

& friends を独自のコードに置き換えてmalloc、条件をシミュレートするのはどうですか? それを行う最善の方法についてはわかりませんが、うまくいくかもしれませんLD_PRELOADいくつかのサンプルコードはこちら)。

于 2013-03-31T17:47:01.247 に答える