スマートポインタによって引き起こされるメモリリークを発見する "技術"を知っている人はいますか?私は現在、参照カウントでスマートポインタを頻繁に使用するC++で書かれた大きなプロジェクトに取り組んでいます。当然のことながら、スマートポインタによってメモリリークが発生しています。スマートポインタは、コードのどこかで参照されているため、メモリが解放されません。 "不必要な"参照でコード行を見つけることは非常に難しく、対応するオブジェクトはフリーではありません(それはもはや使用されません)。スマートポインタによって引き起こされるメモリリークを見つける
私は、参照カウンタのインクリメント/デクリメント操作のコールスタックを収集することを提案しているWebでいくつかのアドバイスを見つけました。これは私に良いヒントを与えてくれます。どのコードによって参照カウンターが増減しましたか?
しかし、私が必要とするのは、対応する「増加/減少コールスタック」をグループ化する何らかの種類のアルゴリズムです。これらの呼び出しスタックのペアを削除した後、(少なくとも)1つの "呼び出しスタックを増やす"ことが残っていると、対応するオブジェクトが解放されないようにする、「不必要な」参照を持つコード部分が表示されます。今はリークを修正することは大したことではありません!
しかし、誰かがグループ化を行う「アルゴリズム」のアイディアを持っていますか?
開発はWindows XPで行われます。
(私は...説明しようとしたものを、誰かが理解願っています)
編集:私は循環参照に起因するリークについて話しています。
私は理解しています...プログラミング言語やプラットフォームをより具体的に参照できますか?メモリリークは、その取り扱いが異なる可能性があります。 – zxcv
スマートポインタは、一般にC++/STLを意味します。 –
ここには混乱があります。私はポインタを持っていない割り当てられたメモリ(スマートポインタでは起こらないはずです)、循環参照に起因するリーク、およびポインタが保持されているので不必要に拡張されたオブジェクトを区別する価値があると思います。 –