如何对C程序进行内存使用分析

7
我需要找出我正在运行的Linux程序中,哪一部分占用了多少内存(可以是百分比或绝对值)。我需要创建多个这样的程序的概要文件,以便我可以识别代码中占用内存更多的一些较大的消费者,并查看是否可以优化它们以使用更少的内存。我需要在MIPS平台上实现,不幸的是,Valgrind在MIPS上无法工作。
任何帮助/指针将不胜感激。

1
Valgrind 现在支持 MIPS。请访问 https://bugs.kde.org/show_bug.cgi?id=270777 进行查看。 - MannyNS
4个回答

9
除了Valgrind之外,还有很多其他的内存调试器/分析工具。以下所有工具似乎都支持MIPS(但我没有在该架构上尝试过):jemalloc、CCMALLOC、mpatrol、NJAMD、Dmalloc,甚至包括Google自己的google-perftools。

6
你可以使用自己的函数包装所有对freemalloc的调用,在其中提供每个分配所在的文件和行号等信息。有了这些信息,很容易看出哪些内存被使用在哪里。

@Stefano,如果你想在malloc调用中添加额外的参数,这种方法行不通,对吧?(我是一个完全的Linux新手) - Andreas Brinck
2
应该可以工作。在这里检查:http://www-2.cs.cmu.edu/afs/cs.cmu.edu/academic/class/15213-s03/src/interposition/mymalloc.c - Stefano Borini
哦,等等... 你为什么需要传递额外的参数? - Stefano Borini
@Stefano,如果您没有将此信息传递给包装的malloc,那么您将如何知道哪个代码正在分配什么内存?在我的C++代码中,我将__FILE__和__LINE__传递给new以实现此目的。 - Andreas Brinck
@Stefano,应该是__FILE____LINE__ - Andreas Brinck

4

1

内存消耗不应受到底层处理器架构的影响,因此您可能可以在 x86 Linux 上进行内存分析。是的,绝对内存量可能会受到影响,但由于您更多地关注相对而非绝对数字,这应该可行。

话虽如此,如果 Linux x86 构建需要重新编译,那么这个解决方案很可能不是一个选项。


2
假设从MIPS移植到x86是那个程序的小菜一碟。 - Laurynas Biveinis
不可否认,那将是瑕疵中的一只苍蝇。 - Timo Geusch
是的。我想要分析的程序,如果我必须将该程序及所有相关库移植到x86架构上,可能需要数月时间 :-)。所以这对我来说行不通。 - Harty
好的,如果它不仅仅是一个简单的重新编译,那么这可能不是最好的解决方案... - Timo Geusch

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接