内存泄漏弄个明白

来源:互联网 发布:激战2人类男捏脸数据库 编辑:程序博客网 时间:2024/05/20 07:33

没有用,又没有被释放掉所以就产生了内存泄露。

如果你参加面试,面试官经常会问到你的一个问题可能是:你在开发过程中,有过排除内存泄漏的经验吗?对于一个合格的Android/C/Java开发老手,这个问题想必已经深入你的心;若是一名新手或者一直对内存泄漏这个东西模模糊糊的工程师,你的答案可能让面试官并不满意,这里将从底到上对内存泄漏的原因、排查方法和一些经验为你做一次完整的解剖。

处理内存泄漏的问题是将软件做到极致的一个必须的步骤,尤其是那种将被用户高强度使用的软件。

 

一个简单的C和Android的例子


一个最简单的C的内存泄漏的例子:

char *ptr1 = (char *)malloc(10);char *ptr2 = (char *)malloc(10);ptr2 = ptr1;free(ptr1)

这里最后发生了10个字节的内存泄漏,那么到底发生了什么?

首先各自分配了两块10个字节的内存,分别用叫ptr1和ptr2的指针指向这两块内存(就像是java中的引用),然后呢让ptr2也指向一开始ptr1指向的那块内存(这时候ptr1和ptr2都指向了ptr1一开始指向的那个10个字节的内存),最后用free将ptr1指向的那块内存给释放了——>结果就是一开始ptr2指向的那块内存发生了泄漏(没人用了却又回收不掉)


原创粉丝点击