如何检查我的 c++ 程序在内存中增长的状态

How to inspect what state of my c++ program is growing in memory?

本文关键字:内存 状态 程序 c++ 何检查 检查 我的      更新时间:2023-10-16

我不使用动态内存分配(除了我做静态 A* a = new...但这只发生一次)...然而,当我运行几次迭代时,通过 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>