C++ Builder 6 で作成されたアプリケーションに問題があります。しばらく (週、月) 実行した後、アプリケーションがクラッシュし、エラー メッセージが表示されずに閉じます。クラッシュの直前にアプリケーション ログに、多くの「メモリ不足」の例外が記録されます。メモリ不足の例外をスローしているプロセスを調べたところ (下のスクリーンショット)、コミットされていないプライベート メモリ スペースがたくさんあります。そのような行動の理由は何ですか?
私は数年前に一度、そのような問題を抱えていました。その理由は、リンカーオプションでチェックされていない「動的ライブラリを使用する」オプションでした。もう一度確認すると、問題は解消され、その逆も同様でした。私が作成したテストアプリケーションは、「new char[1000000]」を呼び出してから削除するだけでした。メモリは毎回解放されましたが (Windows タスク マネージャーでコミットされたメモリの増加はありませんでした)、しばらくしてメモリ不足になった後、VMMap はまったく同じことを示しました。多くのプライベート メモリが予約されていますが、そのほとんどはコミットされていません。
問題は再発しましたが、同じ方法で修正することはできません。それが理由かどうかはわかりませんが、同じマシンに Builder 6 と 2010 をインストールしました。今は Builder 6 しか持っていませんが、以前のようにテスト アプリケーションでエラーを再現できないようです。どうやら、メモリマネージャのエラーか何かがあるようです。CodeGuard はメモリ リークを示しません。「新規」でメモリブロックを作成すると「メモリコミットサイズ」に即座に表示され、削除するとメモリ使用量が減少するため、メモリリークはそうではないと仮定すると、タスクマネージャーは「メモリコミットサイズ」をあまり表示しません.
何か私にできることはありますか?コミットされていないメモリを解放する方法はありますか? 問題をさらに診断する方法は?
スクリーンショット: http://i.stack.imgur.com/UKuTZ.jpg