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