一般的なタイトルで申し訳ありませんが、より明確にする方法がわかりませんでした。
MacOS 10.8.3 で C++ プログラムを書いています。AppleのInstrumentsを使用してメモリリークがあるかどうかを分析しようとしましたが、結果は次のとおりです
残念ながら(実際の理由はわかりませんが)コール ツリーにエントリが表示されないため、どのコールがリークの原因であるかを理解できませんでした。
ただし、Instruments はリークしたメモリのアドレスを表示するので、メモリの内容を分析してエラーに関するヒントを得るために、gdb を開いて実行中のプロセスにアタッチしました。これがgdbが返したものです
(gdb) x/s 0x7fa0f3400720
0x7fa0f3400720: "OS_dispatch_queue_specific_queue"
(gdb) x/s 0x7fa0f34005d0
0x7fa0f34005d0: "OS_xpc_connection"
(gdb) x/s 0x7fa0f3400640
0x7fa0f3400640: "OS_dispatch_object"
(gdb) x/s 0x7fa0f3400660
0x7fa0f3400660: "OS_dispatch_queue"
(gdb) x/s 0x7fa0f3400680
0x7fa0f3400680: "OS_dispatch_source"
(gdb) x/s 0x7fa0f34006a0
0x7fa0f34006a0: "OS_dispatch_semaphore"
(gdb) x/s 0x7fa0f34006c0
0x7fa0f34006c0: "OS_dispatch_group"
等々。明らかに、私のコードにはこの文字列はありません。
計算を高速化するために、pthreads を大量に使用しています。これらのリークは、私の pthread の使い方の間違いによって引き起こされたのでしょうか、それとも別の原因でしょうか? 実際に私が驚いたのは、リークが (比較的) 小さいことですが、コードに設計エラーがあった場合は、はるかに大きなリークが予想されます (コードはしばらく実行され、数百を作成および破棄しています - そうでない場合)数千 - スレッド)。
必要に応じて、コードの一部を表示できます (プロジェクトはそれほど大きくありませんが、ここに投稿するには大きすぎることは確かです)。
どんな提案でも大歓迎です。