c++ - 如何计算哪个函数请求多少字节?

标签 c++ linux

我有一个复杂的 C++ 代码库。我运行了一个内存分析器来计算 malloc 分配的字节数,这给了我 X 字节。理论上,我的代码应该返回 X-Y 字节(Y 随输入而变化,范围从几 KB 到几 GB,因此这是不可忽略的。)

我需要找出代码的哪一部分要求额外的字节。我尝试了一些工具,但没有效果:massifperf,我什至尝试过 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/

相关文章:

c++ - 从另一个方法调用非静态成员方法

linux - 如何通过预置文件安装 rsyslog-pgsql wile install linux with default answers

linux - 如何在 Linux Gnome 终端中格式化 stat 表达式的输出?

linux - 文件传输后终止 TFTPD

c++ - 跨 C++0x 编译器的 lambda 特征不一致

c++ - 如何根据条件声明一个对象并使其在函数的其余部分可用?

c++ - 如何在 64-linux 上使用 c++ 中的 new 运算符动态分配大内存,如 10 G?

python - C++ 输出与 Python 不同的消息(从串口读取)

linux - 在插入模式下移至 VI 中当前行的行尾或行首

c - pread() 中的奇怪行为?