在某些程序中,一些分配的内存根本不会被破坏,但它们是程序整个运行时间所必需的。因此,通常被认为是安全的。
但是还有其他一些对象并不打算用于程序的整个运行时间,但不会由于开发人员的失误而被破坏。这些是应该解决的实际内存泄漏。
当我们运行以下 Valgrind 命令时,它只显示程序执行结束后的总泄漏量。因此,有人可以澄清如何将上述两种情况与 Valgrind 泄漏检查输出区分开来。
我用来检测内存泄漏的命令;
valgrind --log-file=valgrind_output.txt --tool=memcheck --leak-check=yes ./MyTestProgram
执行结束时的典型输出;
==10108== LEAK SUMMARY:
==10108== definitely lost: 392,323 bytes in 1,164 blocks
==10108== indirectly lost: 178,120 bytes in 4,283 blocks
==10108== possibly lost: 170,155,118 bytes in 3,347,087 blocks
==10108== still reachable: 263,778,326 bytes in 3,935,669 blocks
Valgrind 中是否有类似 IBM Purify 工具中的 Tap 的功能,可以在运行时检测当前泄漏的内存?