Куда уходит моя память? - PullRequest
       8

Куда уходит моя память?

1 голос
/ 22 февраля 2011

Мы использовали Vmmap, Processexplorer и MS Detours для анализа использования памяти в нашей программе. Нашей целью было проверить использование памяти нашей программой. Например, мы знаем, что у нас есть X МБ данных, которые мы загружаем с диска в память, мы хотим убедиться, что мы как-то не используем 2X МБ памяти для этого.

Однако мы заметили следующие расхождения: - для определенной точки во время выполнения Vmmap сообщит о ~ 1310 МБ частного рабочего набора, где Processexplorer сообщит о ~ 1304 МБ (только 6 МБ, но какой из них "более" точен ...) - отслеживание памяти с помощью MS Detours сообщит о ~ 948 МБ, выделенных из вызовов HeapAlloc, но Vmmap скажет, что программа использует ~ 1143 МБ личной кучи

Мой вопрос За исключением ошибок в нашем коде отслеживания и отображении памяти драйверами, кто-нибудь может объяснить, как Vmmap и Processexplorer могут захватывать больше данных памяти, чем наши перехватчики MS Detours?

Другие известные вызовы, к которым мы подключились: - VirtualAlloc - ZwAllocateVirtualMemory - RtlAllocateHeap - MapViewOfSection

Заранее большое спасибо!

1 Ответ

1 голос
/ 04 апреля 2011

было бы предложено взять дамп памяти в это конкретное время и открыть его в windbg и сделать! Address -summary.Эта команда должна сообщить вам состояние каждой области памяти.Если это приложение .NET, то вы можете углубиться и заглянуть в кучу GC.Вы можете сослаться на статью http://vpnchoudhary.blogspot.com/2011/03/out-of-memory-exception-simple.html для более подробной информации.

...