現在、さまざまな場所にメモリを割り当てるプログラムを書いています。ヒープがメモリ不足になったとき、つまり malloc() が NULL を返したとき、プログラムがどのように動作するかを知りたいです。
何が起こるかをすぐに確認できるように、ヒープ サイズを非常に小さいサイズに設定できるコンパイラ オプションはありますか? gcc コンパイラを使用しています。
次のようにスタックとヒープのサイズを指定できます。
gcc -Wl,--stack=xxxxx -Wl,--heap=yyyyy ...
少なくとも Linux ではulimit -m <max mem>
、プログラムを実行する前に使用できます。
32 ビットとしてコンパイルし、大量のメモリを予約して仮想アドレス空間を使い果たします (コミットする必要はありません。予約するだけです (これらは Windows の用語であり、Linux に相当するものがあると確信しています)。
Windows には、メモリを制限するために使用できるジョブ オブジェクトもありますが、単純なVirtualAlloc
手法でうまくいく可能性があります。
これの良いところは、おそらくタイマーを使用して制限を動的に変更し、ランダムな時間に何度も何度もプログラムにストレスを与えることができることです。
& friends を独自のコードに置き換えてmalloc
、条件をシミュレートするのはどうですか? それを行う最善の方法についてはわかりませんが、うまくいくかもしれませんLD_PRELOAD
(いくつかのサンプルコードはこちら)。