Мы использовали 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
Заранее большое спасибо!