2011-12-03 6 views
1

私はいくつかのメモリリークチェックを行うためにTotalviewのMemoryscapeを使っていますが、HEAPでは少なくとも「none」はありません....しかし、MemoryScapeのようなツールはスタックリークではなくヒープをチェックするだけです...POSIX THREADのスタック上のMemory LEAKSをチェックする最も良い方法は?

私はAIXとSolaris(おそらくLinuxでも、まだチェックしています)で小さなリークが発生していることに気がつきました。

私はすべての作業を行います私のアプリケーションでのシングル(合流可能)、スレッドを使用するのです...

私と一緒にご負担願い、Cは私の一日の仕事ではありません;-)私は2つの質問があります

  • 私はPOSIXスレッドを生成し、mallocなどを実行します...これらはヒープ上かスレッドスタック上にありますか?スレッドがmallocを解放していないときにメモリチェック(ヒープ)ツールがリークを検出するのは一般的ですか?

  • STACKのリークを見つけるためにどのようなツールをお勧めしますか?

は、私はおそらく私のスレッドのスタック上の漏れをチェックするためにLinux上でvalgrindのを使用することができます..私はSolaris上で「libumemによる」を使用しているが、その場合はわからないが、私は必要なものを見つけるのですか?ヘルプ;-)のため

おかげ

リントン

+0

スタックリークとは何ですか? – Duck

+0

スタックがリークすることはありません。 –

+0

彼が意味する場合を除き、彼はスレッドのスタックのために使用しているスペースを整理します。 – Duck

答えて

3

私は、POSIXスレッドを生成し、それがない場合はmalloc関数のetc ...これらはスタック ヒープ上またはスレッド上にありますか?メモリチェック(ヒープ)ツール は、スレッドがmallocを解放していないときにリークを検出するでしょうか?

mallocで取得するものは、どこから取得してもヒープからのものです。メモリデバッガは、リークをキャッチできる必要があります。 Valgrindは漏れを見つけるのに適したツールであり、スレッドでうまくいくはずです。

1

スタックに「リーク」はありません。ローカル変数の専門用語は「自動変数」であり、関数が終了すると即座に割り当てが解除されます。

ただし、結合可能なスレッドがある場合はリークする可能性がありますが、スレッドハンドルでは明示的にpthread_join()を呼び出してはいけません。

+0

こんにちは、私はスレッドハンドルでpthread_join()を行っています。 ..私はlibumemとTotalViewのMemoryScapeが何も言わないにもかかわらず、私のアプリケーションが漏れているように見えるのは混乱していると思います... mmmm –

関連する問題