我想找出哪些库使用的内存最多。我想在我的应用程序中制作一种内存记录器。这需要以编程方式查找其自己的进程中的哪些库使用了多少内存。
例如,我有一个使用 10MB 内存的程序,其中有一个使用 9MB 内存的 .dll。我想查看所有 dll 以及它们使用了多少内存。 该应用程序将在 Windows 上运行。一切都需要以编程方式完成。
最佳答案
不确定这是否是最简单的方法,但也许您应该在加载每个库后立即 Hook 内存分配 WinAPI 函数。 然后在你的钩子(Hook)上你将能够进行必要的计数 看一下 Microsoft Detours 库,它是一个很好的 Hook 框架 (http://research.microsoft.com/en-us/projects/detours/)。它通常不是免费的,但可以免费“用于研究、非商业和非生产用途”
实际 Hook 哪些函数实际上取决于需要跟踪的 dll。
如果它们都是使用动态链接的 MSVC 运行时进行编译的,则必须 Hook malloc()/free()/calloc()/realloc() 系列函数。 如果它是针对运行时静态链接的,或者不是用 MS VC 编译的,则必须 Hook 与内存相关的 WinAPI 调用,例如 HeapAlloc/HeapCreate/HeapDestroy/HeapFree/heapReAlloc/VirtualAlloc/VirtualFree (我只是寻找与内存相关的msvcr100.dll 从 kernel32.dll 导入的函数)
关于c++ - 我想确定动态链接库使用了多少内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9226918/