Как следует интерпретировать данные «все распределения» в приборе утечки? - PullRequest
1 голос
/ 14 сентября 2010

Я написал приложение и проверял его на утечки памяти, когда заметил, что категория «все выделения» в симуляторе утечек продолжает увеличивать свой размер всякий раз, когда я открываю и закрываю вложенное представление.

Я изначально думал, что это утечка памяти, но она не отображается как утечка во вкладке утечек.

Это нормально?

Screenshot of the simulator

Ответы [ 2 ]

2 голосов
/ 24 февраля 2011

Зависит от того, на какой столбец таблицы вы смотрите.

Значения «Общий» и «Общий байт» всегда будут увеличиваться, поскольку они представляют собой текущий подсчет выделений, выполненных без учета освобождений.

Однако цифры «Живые байты» и «# Живые» должны увеличиваться при выделении объекта или блока памяти, но должны уменьшаться при их освобождении.

Повторное открытие и закрытие вложенного представления должно (при условии кэширования изображения или данных) зависать вокруг фиксированного количества живых байтов и живых объектов / блоков памяти.

Однако инструменты иногда запутываются, как вы можете видеть на скриншоте. Весь столбец # Transitory показывает «0», что, очевидно, неверно. Временный объект - это просто тот, который был выделен и впоследствии освобожден, то есть это неживой объект.

(# Living + # Transitory == # Всего)

Всякий раз, когда инструменты дают мне этот столбец нулей, я покидаю текущий цикл и начинаю новый.

Что касается инструмента «Утечки», он будет показывать только те объекты или блоки памяти, на которые больше нет указателей. Если программа постоянно выделяет все больше и больше объектов / блоков памяти, но сохраняет на них указатели, инструмент утечки не будет их отображать.

1 голос
/ 15 сентября 2010

Это имело бы смысл, не так ли? Каждый раз, когда вы что-то делаете в приложении, что-то выделяется, например, ваши разные подпредставления. Поэтому общие ассигнования будут увеличиваться. Это просто запись общих ассигнований.

...