0

一般的なタイトルで申し訳ありませんが、より明確にする方法がわかりませんでした。

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 の使い方の間違いによって引き起こされたのでしょうか、それとも別の原因でしょうか? 実際に私が驚いたのは、リークが (比較的) 小さいことですが、コードに設計エラーがあった場合は、はるかに大きなリークが予想されます (コードはしばらく実行され、数百を作成および破棄しています - そうでない場合)数千 - スレッド)。

必要に応じて、コードの一部を表示できます (プロジェクトはそれほど大きくありませんが、ここに投稿するには大きすぎることは確かです)。

どんな提案でも大歓迎です。

4

1 に答える 1