我想找出哪些库使用的内存最多。我想在我的应用程序中创建一种内存记录器。这需要以编程方式查找哪些库在其自己的进程中使用了多少内存。
例如,我有一个使用10MB内存的程序,其中有一个使用9MB内存的.dll。我想看看他们使用的所有dll和多少内存。 此应用程序将在Windows上运行。一切都需要以编程方式完成。
答案 0 :(得分:2)
不确定它是否是最简单的方法,但也许你应该在加载每个库后立即挂钩内存分配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导入的函数)