2

我有一个相当复杂的系统,运行着 30 个应用程序。一个相当复杂的 C++ 应用程序正在泄漏内存,我想我已经修复了它。

到目前为止我所做的是:

问题是,我怎样才能确保没有泄漏?我想如果虚拟内存停止增加,那么我可以确定没有泄漏。当我测试我的应用程序时,我触发了多次分配和释放内存的循环以确保。

4

3 回答 3

0

如果 valgrind 不报告泄漏,则在无法访问的内存区域的意义上没有泄漏(在您检查的运行期间)。这并不意味着程序不分配内存,使用它并且在不再使用它时不释放它(但它仍然可以访问)。例如,考虑一个典型的待办事项堆栈,您将新项目放在顶部,处理顶部的项目,然后推送另一个。永远不会回到旧的,所以用于它们的内存被浪费了,但从技术上讲它不是泄漏。

您可以做的是监视进程的内存使用情况。如果它稳步增加,您可能会在那里遇到问题(真正的泄漏,或者某些不需要增长的数据结构)。

如果这不是真的很紧迫,从长远来看,它可能会更便宜,只是让它......

于 2013-05-02T17:18:04.690 回答
0

除非您确切地知道应用程序将分配新内存的所有条件,否则您无法确定。如果您不能诱发所有这些情况,则 valgrind 和 htop 都不会保证您的应用程序在所有情况下都不会泄漏内存。

但是,您至少应该确保应用程序在正常情况下不会泄漏内存。

于 2013-05-02T06:47:16.087 回答
-1

您需要使用一个名为 Valgrind 的工具。它是适用于 Linux 和 Mac OS X 操作系统的内存调试、内存泄漏检测和分析工具。Valgrind 是一个灵活的程序,用于调试和分析 Linux 可执行文件。按照步骤..

只需安装 valgrind

运行... ./a.out arg1 arg2

现在如何使用此命令行打开详细的内存泄漏检测器: valgrind --leak-check=yes ./a.out arg1 arg2 valgrind --leak-check=yes /path/to/myapp arg1 arg2

或者您也可以设置日志文件: valgrind --log-file=output.file --leak-check=yes --tool=memcheck ./a.out arg1 arg2

您可以检查其日志以查找内存泄漏错误... cat output.file

于 2013-05-02T07:18:58.500 回答