Ум: где находятся освобождения, и что такое отрицательное распределение?

У меня есть два фундаментальных вопроса относительно UMDH:

  1. Как он может помочь мне найти утечки, если все, что он делает, это распределение отчетов, а не освобождение? В результате сравнения я получаю много новых распределений, но нет отчета о том, какие были освобождены, а какие нет (что привело к утечке).

  2. Отчет о разнице упорядочен по уменьшению размера выделения. В нижней части отчета есть несколько распределений, которые являются отрицательным числом, и количество распределений равно 0. Что это значит?

1 ответ

Решение
  1. UMDH (или фактически: Windows из-за настройки GFlag) будет хранить стек вызовов в то время, когда память выделена для объекта. Если эта память освобождается, стек вызовов также теряется. Но это нормально, потому что он освобожден, и у вас нет утечки в этом случае.

    Таким образом, остальные элементы (все, что вы видите) являются распределениями, которые (потенциально) вызывают утечку. Для всех этих распределений вы знаете, где создается объект (из стека вызовов), и ваша задача - выяснить, где он должен быть освобожден (например, путем проверки кода).

  2. Я не совсем уверен в этом, но рассмотрим долгоживущий объект, который существовал до того, как вы сделали первый снимок UMDH. Если это будет освобождено позже, оно будет отображаться как негативная память. В таком случае у вас, вероятно, также нет стека вызовов (как описано в 1.), и это просто информация.

    Это может указывать на то, что вы должны начать делать снимки UMDH раньше, но обычно также можно игнорировать их, если размер не соответствует объектам, которые вы ищете.

Другие вопросы по тегам