我 不使用动态内存分配 (除了3行,其中我执行静态A * a = new ...但只发生一次)。 ..但是当我运行几次迭代时,通过top(1)看到的内存使用量似乎随着迭代次数的增加而增加。我设置了一个具有高忽略计数的断点,然后检查内部数据结构以确保它们不会增长(我的大部分状态都在矢量< vector>中),但它们会被回收,所有条目都是大小/容量为100的矢量(初始默认值),即使过了一段时间。
有哪些方法可以使用gdb或其他任何方法调查不断增长的内存跟踪?
答案 0 :(得分:3)
如果您使用的是Linux,则可以使用精彩的Valgrind工具。安装它,使用-g
标志编译程序,然后运行
$ valgrind ./my_prog
阅读为您打印的日志,您将看到内存使用情况摘要以及如何获取更多信息的说明。
答案 1 :(得分:3)
正如Ivella建议的那样,您可以使用Valgrind来分析堆(通过massif)或检查内存泄漏或访问错误(通过memcheck)。你说你没有动态内存分配 - 但是std :: vector通过动态内存分配在堆上分配。无法保证C ++标准库在程序运行期间始终将循环堆内存返回给操作系统 - 因此,内存利用率可能会随着时间的推移缓慢增加而不会以任何有害方式泄漏。
对于内存错误/泄漏检查:
valgrind --tool=memcheck <program to analyse>
对于堆分析:
valgrind --tool=massif <program to analyse>