Как узнать, куда моя память идет

У меня есть ситуация, где цикл загрузки и затем закрытия документа съедает некоторых Мбит RAM. Эта память не пропускается, поскольку что-то владеет ею и очищает ее, когда приложение выходит (Визуальный Детектор Утечки и выставочное соглашение об инструменте Mac Leaks по этому). Однако я хотел бы узнать, куда это идет. Я предполагаю, что это - своего рода кэш в приложении, которое заполняется, когда документ загружается, но не освобожденный, когда документ закрывается. Какие методы или инструменты я мог использовать для обнаружения, где эти выделения делаются?

ОБНОВЛЕНИЕ:

Сообщение следующего Hans я добавил цикл к приложению, чтобы неоднократно открыть и закрыть документы. Я нашел, что был начальный переход в использовании памяти ('Частные Байты', как сообщается Проводником Процесса) после загрузки этих первых двух документов, но затем это больше не увеличивалось каждый раз. Таким образом, это предполагает, что нет никаких новых выделений, и очевидное увеличение, вероятно, произойдет главным образом из-за артефакта подкачки страниц.

Я также более тщательно изучил Инструменты на Mac, который был полезен для наблюдения, где выделения происходили: создайте Инструмент, состоявший из инструментов Allocations и Leaks, затем добавляют снимок "кучи" в запуске и конце цикла, и в списке Heapshots он покажет все дельты выделения относительно последнего снимка. Это предполагает, что на Mac выделения памяти увеличивались, но это происходило из-за внутренних кэшей, таких как рисунок CoreGraphics, над которым мы имеем мало контроля.

5
задан the_mandrill 1 June 2010 в 11:50
поделиться

3 ответа

Исходя из предположения, что на самом деле вы измерили оперативную память: конечно, это совершенно нормально. Ваша программа активно обращается к страницам виртуальной памяти при загрузке документа, они будут отображены в RAM. Они останутся там до тех пор, пока другому процессу не потребуется сопоставление страниц с ОЗУ. Некоторые операционные системы предварительно обрезают рабочий набор, например в Windows, когда окна приложения свернуты.

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

2
ответ дан 14 December 2019 в 04:31
поделиться

Если вы можете надежно воспроизвести это, вы сможете использовать отладочную кучу в MS CRT для устранения неполадок. Начните здесь: Обнаружение и изоляция утечки памяти

4
ответ дан 14 December 2019 в 04:31
поделиться

Ну, на самом деле у вас есть утечка . Когда приложение завершает работу, ОС очищает все ресурсы: утечек приложений не происходит в том смысле, что после выхода из него постоянно выделяется память. В XCode есть инструмент, который поможет вам выявлять утечки.
Загляните в

Run->Run with performance Tool->Leaks
. Это запустит ваше приложение, оснащенное кодом, который поможет вам найти утечки.
2
ответ дан 14 December 2019 в 04:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: