问题:
我有一个多线程 C++ 程序,它处理相当多的数据(几 GB)。在某些时候,我的程序用完了主内存,这是我想避免的。从理论上讲,这不应该发生,因为这个程序分析的数据量仍然比我的主内存少得多。
假设的问题根源:
我的猜测是,在某些时候,我会将所有这些数据按值传递给某个函数或一些类似的愚蠢错误。这比增加我的内存使用量而且我用完了主内存。
如何找到导致问题的代码?
我想按功能分析我的程序的内存使用情况。所以结果应该是这样的(两者f
都是g
函数):
f used 10% of total memory used
g used 1% of total memory used
正如这篇文章中所建议的,我看过Valgrind 的 massif。看起来像一个了不起的工具,但valgrind --tool=massif ./myProgram
需要很长时间(即使我大大减少了数据量)。
问题:
我可以使用什么工具来查找源代码中的“错误”?我正在寻找一些不需要永远运行的东西,但仍然能给我我需要的洞察力。我也愿意通过以某种方式更改我的源代码以编程方式执行此操作。
环境:
编译器:Clang 9
操作系统:RHEL
C++:标准=17