デバッグしているアプリケーションに問題があります。定常状態のメモリ使用量は数百メガバイトです。時折(数時間後)、メモリ使用量が数ギガバイトに急増する状態になります。これが発生したらすぐにプログラムを停止できるようにしたいと思います。
制御が自分のコードを通過する場合、次のようなコードで過剰なメモリ使用をトラップできます。
bool usingTooMuchMemory()
{
PROCESS_MEMORY_COUNTERS pmc;
if (GetProcessMemoryInfo(GetCurrentProcess(), &pmc, sizeof pmc))
return pmc.WorkingSetSize > 0x80000000u; // 2GB working set
return false;
}
適切なポイントでワーキングセットのサイズをテストする必要があるため、これは役に立ちません。私は本当にプログラムが最初に壊れるmalloc
かnew
、ワーキングセットまたはヒープサイズがいくつかのしきい値を超えてしまうことを望んでいます。そして理想的には、ライブラリは膨大な数の小さなブロックを割り当てるのが好きなので、最小限のオーバーヘッドでCRTヒープ自体によってこれを実行したいと思います。
疑わしいコードは、呼び出し元のコードによって作成されたスレッドで実行されているDLLにあります。DLLはCRTに静的にリンクし、特別なヒープ管理はありません。DLLのソースコードがあります。
何か案は?明らかな何かが欠けていますか?