c++ - 我想确定动态链接库使用了多少内存

标签 c++ windows memory dll

我想找出哪些库使用的内存最多。我想在我的应用程序中制作一种内存记录器。这需要以编程方式查找其自己的进程中的哪些库使用了多少内存。

例如,我有一个使用 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/

相关文章:

c++ - 重写 += 运算符 C++

c++ - 将 CALLBACK 从 dll 传递到 EXE

python - 在 MS-Windows 机器上使用 Python virtualenv

c++ - DnsQuery 无法获取某些特定 FQDN 上的有效地址

c++ - 在 Windows 和 OS X 上,我可以在哪里存储 SQLite 数据库?

memory - GLSL编译错误 “memory exhausted”

java - 对于任何给定的输入,代码是否在内存中占用恒定的空间?

C++ 成员函数和类大小

c++ - Windows 和 Linux (x86) 上的相同二进制代码

c++ - 用 C++ 读取文本文件最优雅的方法是什么?