我有一个非常复杂的系统,有30个应用程序正在运行。一个相当复杂的C ++应用程序泄漏了内存,我想我已修复它。
到目前为止我所做的是:
问题是,我怎样才能确保没有泄漏?我想如果虚拟内存停止增加,那么我可以确定没有泄漏。当我测试我的应用程序时,我会触发分配内存的循环并多次取消分配以确保。
答案 0 :(得分:0)
除非您确切了解应用程序分配新内存的所有条件,否则您无法确定。如果你不能诱导所有这些条件,valgrind和htop都不能保证你的应用程序在任何情况下都不会泄漏内存。
然而,你应该至少确定应用程序在正常情况下不会泄漏内存。
答案 1 :(得分:0)
如果valgrind没有报告泄漏,则不再存在内存区域的泄漏(在您检查的运行期间)。这并不意味着程序不会分配内存,使用它并且在它不再使用它时不会释放它(但它仍然可以访问)。想想例如在典型的待办事项堆栈中,您将新项目置于顶部,在顶部处理项目,然后再推送另一个项目。永远不会回到旧的,所以用于它们的内存被浪费了,但从技术上讲它不是泄漏。
您可以做的是监控进程的内存使用情况。如果它稳步增加,那么可能会出现问题(无论是真正的泄密,还是某些不需要增长的数据结构)。
如果这不是真的很紧迫,从长远来看可能会更便宜,只是让它成为......
答案 2 :(得分:-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