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

У меня есть два основных вопроса, касающихся UMDH:

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

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

2

Решение

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

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

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

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

3

Другие решения


По вопросам рекламы [email protected]