我有一个复杂的 C++ 代码库。我运行了一个内存分析器来计算 malloc 分配的字节数,这给了我 X 字节。理论上,我的代码应该返回 X-Y 字节(Y 随输入而变化,范围从几 KB 到几 GB,因此这是不可忽略的。)
我需要找出代码的哪一部分要求额外的字节。我尝试了一些工具,但没有效果:massif
、perf
,我什至尝试过 gdb
破坏 malloc ()
。我可能可以为 malloc 编写一个包装器,要求提供调用函数,但我不知道该怎么做。
有谁知道如何找到程序的不同部分需要多少内存?
最佳答案
如果您使用自定义分配函数(malloc 的包装器),您可以使用 gcc 回溯函数 ( http://man7.org/linux/man-pages/man3/backtrace.3.html ) 来找出哪些函数使用哪些参数调用 malloc。
这会告诉您正在分配的函数。从那里您可以手动将重要内容分类到域中。
这个问题有关于包装本身的很好的信息。 Create a wrapper function for malloc and free in C
更新: 这不会捕获新的/删除的分配,但覆盖它们甚至比 malloc 更容易!参见这里:How to properly replace global new & delete operators +对最佳答案的非常重要的评论“不要忘记其他3个版本:new[],delete[],nothrow”
关于c++ - 如何计算哪个函数请求多少字节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20360445/