我试图了解我的应用程序是否泄漏。
运行我的应用程序时,我会定期运行pmap
并观察:
mapped: 488256K writeable/private: 90144K shared: 0K
mapped: 488260K writeable/private: 101912K shared: 0K
mapped: 488256K writeable/private: 102708K shared: 0K
mapped: 488260K writeable/private: 105112K shared: 0K
我跑着top
观察:
VIRT RES SHR
488260 17684 3020
488256 20060 3032
488256 22700 3032
488256 26132 3032
488256 28772 3032
488256 31880 3032
“RES”和“可写/私有”的增加是让我怀疑泄漏的原因。但是,运行时valgrind
我没有检测到任何重大泄漏,并且当我中止执行时,我始终看到大约 20Mb 的可访问内存:
==19998==
==19998== HEAP SUMMARY:
==19998== in use at exit: 20,351,513 bytes in 974 blocks
==19998== total heap usage: 329,404 allocs, 328,430 frees, 34,562,346 bytes allocated
==19998==
==19998== LEAK SUMMARY:
==19998== definitely lost: 63 bytes in 4 blocks
==19998== indirectly lost: 0 bytes in 0 blocks
==19998== possibly lost: 4,679 bytes in 76 blocks
==19998== still reachable: 20,346,771 bytes in 894 blocks
==19998== suppressed: 0 bytes in 0 blocks
==19998== Rerun with --leak-check=full to see details of leaked memory
==19998==
==19998== For counts of detected and suppressed errors, rerun with: -v
==19998== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
我跑了valgrind --tool=massif
,也看到了 20Mb:
问题:有人能解释一下为什么 valgrind 和 massif 告诉我我的程序一直使用 20Mb 内存,但是 top 和 pmap 告诉我使用量正在增长吗?