2011-06-18 15 views
1

私はCRTDBGがリークのないと報告しているプログラムを持っていますが、Windowsタスクマネージャーによれば、時間がたつにつれてより多くのメモリを占有しています。さらに悪いことに、十分な時間が与えられれば、終了コード-1でクラッシュすることになります。リークのないメモリ使用量の増加?

これはゲームエンジンになりそうなプログラムですが、今すぐレベルをロードしたりアンロードしたりすることでレベルをアンロードする機能をテストしています。これは機能しているように見えます。さもなければ、 '最後の'レベルのエンティティが現在のものに衝突します。私はプログラムを正常に実行し、終了するまでアンロードせずに1つのレベルをロードするとメモリは増加しません。

レベルの読み込みには、ハードドライブからの読み取りとファイルの読み込みが含まれます。私がChipmunk物理ライブラリ、Lua、およびOpenGLを使用していることを知ることも重要です。

これを最も難しくしているのは、CRTDBGがダンプしない方法で、main()の最後に0を返します。

EDIT:あなたは本当にただの出口でそれを解放し、それの多くを割り当てると、メモリをリークしていないよう。また、Visual Studioを使用すると、私には、2008年

+0

ツールを非難することは、通常どこにも起こりません。それを証明し、意図的にメモリをリークし、それが報告されることを確認します。それがチェックアウトされている場合は、プログラムを分析して、なぜそれが長すぎるデータを保持しているのかを理解する必要があります。 –

+0

さて、main()の先頭に 'new'または 'malloc'を貼り付けてください。だから、それは何らかの自動収集、CRTDBGが機能しない、あるいは私が正しく実装しなかったことかもしれません。 – Lucas

答えて

3

それが聞こえます。

おそらく、あなたは、各レベルの読み込みの間に解放/削除するのを忘れたオブジェクトのリストを保持していますか?

0

メモリとサブ割り当ての大きなチャンクをOSに要求する「スマート」アロケータの効果を観察している可能性があります。グローバルoperator newoperator deleteを置き換えることで確認できます。それらが割り当てられたすべてのメモリも割り当て解除されているにもかかわらず、プロセスのメモリ消費量が上がったり上がったりしている場合は、(おそらく)アロケータです。

0

ルアのガベージコレクタは、気に入ったら収集します。 Luaに明示的にコレクションを行うよう指示していないのであれば、実際に使われなくてもそこにメモリが構築されるかもしれません。

+0

レベルロードと同じ頻度でガベージコレクタを強制しても、ガベージコレクタはそれを停止しません。 – Lucas

関連する問題