2

umdh に関して 2 つの基本的な質問があります。

  1. 割り当ての解除ではなく、割り当ての報告だけを行う場合、リークを見つけるのにどのように役立つでしょうか? diff の結果では、多くの新しい割り当てが得られますが、どれが割り当て解除され、どれが割り当て解除されていないかについてのレポートはありません (したがって、リークが発生します)。

  2. 差分レポートは、割り当てサイズが小さい順に並べられます。レポートの下部に、負の数の割り当てがいくつかあります。割り当ての数は 0 です。これはどういう意味ですか?

4

1 に答える 1

3
  1. UMDH (実際には、GFlag 設定による Windows) は、オブジェクトにメモリが割り当てられた時点でコールスタックを格納します。そのメモリが解放されると、コールスタックも失われます。しかし、それは問題ありません。なぜなら、それは解放されており、その場合はリークがないからです。

    したがって、残りの項目 (表示されるすべて) は、(潜在的に) リークを引き起こしている割り当てです。これらすべての割り当てについて、オブジェクトが作成された場所 (コールスタックから) を知っており、どこで解放する必要があるか (コード レビューなどによって) を見つけるのはあなたの仕事です。

  2. これについては正確にはわかりませんが、最初の UMDH スナップショットを作成する前に存在していた長寿命のオブジェクトを考えてみてください。これが後で解放されると、負のメモリとして表示されます。そのような場合、(1. で説明したように) コールスタックも持っていない可能性があり、それは単なる情報です。

    UMDH スナップショットの作成を早めに開始する必要があることを示している可能性がありますが、通常、サイズが探しているオブジェクトと一致しない場合は、スナップショットを無視してもかまいません。

于 2014-12-08T22:12:10.957 に答える