当前位置: 技术问答>linux和unix
linux下内存泄露问题
来源: 互联网 发布时间:2016-06-22
本文导语: 现在在嵌入式linux下做项目,程序越来越大。很多地方都有内存malloc,请问大家有什么办法判断内存泄露吗? 现在唯一担心的地方就是内存泄露。如果有怎么定位? | 推荐valgrind,内存检测工...
现在在嵌入式linux下做项目,程序越来越大。很多地方都有内存malloc,请问大家有什么办法判断内存泄露吗?
现在唯一担心的地方就是内存泄露。如果有怎么定位?
现在唯一担心的地方就是内存泄露。如果有怎么定位?
|
推荐valgrind,内存检测工具
http://valgrind.org/
http://valgrind.org/
|
valgrind 不行吗,很好的memcheck
当然要你移植了。
在就是top这样的工具了。
当然要你移植了。
在就是top这样的工具了。
|
不好处理
前期看看malloc free/delete 是否匹配?
集成测试的时候长时间的跑。。。
:-)菜鸟一个,说错勿怪
前期看看malloc free/delete 是否匹配?
集成测试的时候长时间的跑。。。
:-)菜鸟一个,说错勿怪
|
只能用工具来看看, 工具很多,多找找,看看有没有针对嵌入式应用比较好的。
|
mtrace 试试吧
|
|
学习.....
|
top
|
自己封装一下malloc和free,在里面做个统计看是不是有泄漏。
|
自己封装一下malloc和free,在里面做个统计看是不是有泄漏。
怎么样实现比较好啊,请告诉指导。我也很想了解这方面的知识
怎么样实现比较好啊,请告诉指导。我也很想了解这方面的知识
|
之前在做Linux嵌入式开发的时候,做过一个检测内存泄露和段错误的工具,大体思路如下:
在一个类构造的时候,在构造函数里面把类名输入到一个文件里面,然后再析构的时候再从那个文件里面把那个类名删除。。。
在程序退出的时候检查那个文件,理论上讲该文件应该是空的,否则必定存在内存泄露。
Malloc应该也可以借鉴吧。
在一个类构造的时候,在构造函数里面把类名输入到一个文件里面,然后再析构的时候再从那个文件里面把那个类名删除。。。
在程序退出的时候检查那个文件,理论上讲该文件应该是空的,否则必定存在内存泄露。
Malloc应该也可以借鉴吧。
|
可以自己维护一个链表记录分配的内存,malloc的时候就添加到链表里,free的时候就从链表里删掉。不定期检查链表里内存的块数和大小。
|
还得养好很好的编程习惯才是正常
|
写两个宏或函数封装一下 malloc 和free, 虽然比较土,但是我认为可以发现问题。
|
用mtrace
用法如下:
1. 定义宏export MALLOC_TRACE=
2. 在.c或.cpp文件中引用#include
3. 在开始申请内存之前,调用mtrace();
4. 结束内存跟踪,调用muntrace();
5. 编译时指定参数-g
6. 结果写在MALLOC_TRACE指定的文件中,查看命令$ mtrace , 比如$ mtrace a.out MallocTraceOutputfile.txt
用法如下:
1. 定义宏export MALLOC_TRACE=
2. 在.c或.cpp文件中引用#include
3. 在开始申请内存之前,调用mtrace();
4. 结束内存跟踪,调用muntrace();
5. 编译时指定参数-g
6. 结果写在MALLOC_TRACE指定的文件中,查看命令$ mtrace , 比如$ mtrace a.out MallocTraceOutputfile.txt
|
用valgrind吧,把它用熟就可以了。人家KDE这么大的项目都用它来检测错误和内存泄露。
|
自己 写 内存 分配器吧。
|
同意——我这一年多发现的别人内存泄漏都是通过阅读代码发现的,而且我的代码绝对没有内存泄漏。
valgrind不是万能的,如果执行过程不能覆盖所有路径,valgrind也不能发现问题。