2011-07-31 12 views
2

オブジェクトにメモリリークがあったかどうかをテストするために、インスタンスを10000回インスタンス化し、10000回削除しました。その後、私のプログラムは約500kbを使いました。私は私のオブジェクトが漏れているとは思わない。 Linuxのこれはヒープフラグメンテーションの兆候ですか?

おかげ

+4

どのオペレーティングシステムですか?あなたの「プログラムが約500kb以上を使用していた」ことをどのようにして知っていますか? – Nemo

答えて

6

少なくとも、Cライブラリを使用すると、deleteを呼び出すという理由だけで戻ってOSにメモリを解放しません。それはあなたのプロセス内の "フリーリスト"にメモリを置きます。したがって、topまたはcat /proc/XXX/statusのようなコマンドを使って仮想メモリの使用量を測定すると、その空きリストを含むプロセス内のすべてのものが消費するサイズがわかります。

freeまたはdelete "大きな"オブジェクトがある場合、Cライブラリはメモリをシステムに戻しません。 "large"の定義は128Kバイトのようなものです。

Windows、Macなどは同様に動作すると思われますが、わかりません。

あなたの質問に対する短い答えは「いいえ、必ずしもそうではありません」です。

2

クラスに実際に含まれているものと含まれているものによって、あなたのクラスがリークしない場合でも、あなたが記述する内容が起こる可能性があります。

いくつかの標準ライブラリの実装では、メモリプールからstd::stringのようなクラスを割り当てます。

テスト実行の代わりにvalgrindのような実際のリークチェッカーを使用する必要があります。

関連する問題