有谁知道检测内存泄漏的一般算法?
答案 0 :(得分:6)
矛盾记忆泄漏分析
http://www.cs.cornell.edu/~rugina/papers/sas06.pdf
相关性较低......
Apple开发者文档也有一篇关于该主题的文章(具体)......
并且通常(也是特定的)跟踪内存使用情况...
答案 1 :(得分:2)
最简单的方法是为应用程序中的每种对象设置一个计数器。当分配对象增加计数器时,dellocating减少它。当应用程序终止时,检查所有计数器是否为零。
答案 2 :(得分:1)
虽然不是算法,但是有太多的第三方工具可以帮助分析代码中的内存泄漏。根据项目的大小,自己手动跟踪所有分配可能是不合理的。
如果我在* nix环境中,我个人喜欢使用valgrind。
替代方案,让程序运行很长时间,并从顶层或任务管理器中查看进程使用的内存分配。如果它正在泄漏,它将一直上升。如果没有,它应该膨胀到它的最大值然后保持停留,或者在这个和更低的值之间波动。
不幸的是,增长并不一定等于泄漏,可能只是你的程序需要很多内存。
答案 3 :(得分:0)
如果您使用Windows,则需要删除程序。如果你使用* nix试试valgrind。
答案 4 :(得分:0)
嗨,这是在代码的预处理器指令中检测内存泄漏的方法,包括这些语句
# define _CRTDbg_Map_Alloc
# include<stdlib.h>
# include<crtdbg.h>
并在main函数中使用此函数来转储内存泄漏。
_CrtDumpMemoryLeaks();