Я хочу определить, сколько памяти используется динамически связанными библиотеками. - PullRequest
2 голосов
/ 10 февраля 2012

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

Например, у меня есть программа, которая использует 10 МБ памяти, там есть .dll, которая использует 9 МБпамяти.Я хотел бы увидеть все библиотеки DLL и сколько памяти они используют.Это приложение будет работать на Windows.Все должно быть сделано программно.

1 Ответ

2 голосов
/ 10 февраля 2012

Не уверен, что это самый простой подход, но, возможно, вам следует перехватить выделение памяти функциями WinAPI сразу после загрузки каждой библиотеки. Тогда в вашем крючке вы сможете сделать необходимый подсчет Взгляните на библиотеку Microsoft Detours как на хорошую среду для перехвата (http://research.microsoft.com/en-us/projects/detours/). Как правило, она не бесплатна, но доступна бесплатно "для исследовательских, некоммерческих и непроизводственных целей"

Какие фактические функции для перехвата в действительности зависят от dll, которые нужно отслеживать.

Если все они скомпилированы с динамически связанными средами выполнения MSVC, вам нужно перехватить ряд функций malloc () / free () / calloc () / realloc (). Если он был статически связан со средой выполнения или не был скомпилирован с MS VC, вам придется перехватывать связанные с памятью вызовы WinAPI, такие как HeapAlloc / HeapCreate / HeapDestroy / HeapFree / heapReAlloc / VirtualAlloc / VirtualFree (я только что искал связанные с памятью функции, которые msvcr100.dll импортирует из kernel32.dll)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...