C++ 重载malloc以跟踪第三方库的内存使用情况

C++ 重载malloc以跟踪第三方库的内存使用情况,c++,c,memory-management,C++,C,Memory Management,可能重复: 我正在考虑实现一个内存跟踪工具来跟踪代码中的malloc,方法是在编译时链接一个库,用宏覆盖malloc,添加一些额外的调试信息,将一些内容打印到日志中。有没有可能在我没有源代码的第三方库中执行此操作,或者可能使用调试库?你能像我说的那样在一个库中链接到第三方库,它会使用我的库中定义的方法(或宏)吗 感谢使用分析器:对于VisualStudio来说是一个非常好的工具。我认为你做不到,malloc是一个系统调用 二进制库实际上并没有调用malloc(),而是将存储在计算机上的库加载到

可能重复:

我正在考虑实现一个内存跟踪工具来跟踪代码中的malloc,方法是在编译时链接一个库,用宏覆盖malloc,添加一些额外的调试信息,将一些内容打印到日志中。有没有可能在我没有源代码的第三方库中执行此操作,或者可能使用调试库?你能像我说的那样在一个库中链接到第三方库,它会使用我的库中定义的方法(或宏)吗


感谢使用分析器:对于VisualStudio来说是一个非常好的工具。

我认为你做不到,malloc是一个系统调用

二进制库实际上并没有调用malloc(),而是将存储在计算机上的库加载到内存中。然后在正确的内存地址执行该函数


重新定义malloc()只会让事情变得混乱。

这取决于您尝试在哪个平台/操作系统上执行此操作:

  • 如果您在嵌入式设备上使用RTOS,您也可以直接在其中更改代码
  • 如果您使用的是Linux,您可能会在某个地方找到代码并在那里进行更改以重新编译,但这可能会对您的平台造成相当严重的性能影响
  • 对于其他人,您可以在应用程序中使用包装器,将其称为“os_malloc”或类似的东西,并为任何调试或类似的事情实现该函数

最后一个可能是你最安全的赌注,不管发生什么…

使用valgrind,省去麻烦。否则,请在您喜爱的搜索引擎中搜索。另外,这个网站在这个主题上有很多问题…例如,这里有一个dup:。。。除非有人调用
sbrk()
来分配内存:)嗯,
malloc(3)
绝对不是系统调用,而是库例程。您可能想到的是
brk(2)
和/或
mmap(2)
——系统调用UNIX libc依赖于内存管理。这也不是Windows上的系统调用。