免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 6776 | 回复: 12
打印 上一主题 下一主题

经典面试题: 内存泄露的检测与防范 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-05-02 19:04 |只看该作者 |倒序浏览
汗,被几个面试官问了2,3次,都没答出来,
只说是写代码时多注意,还好最终见到hr了...
大家交流下,有啥特别好的方法或tools么?

论坛徽章:
0
2 [报告]
发表于 2010-05-02 20:24 |只看该作者
使用引用计数,例如shared_ptr?

采用预分配内存,离散分配统一回收?

绝不跨模块传递引用?

论坛徽章:
0
3 [报告]
发表于 2010-05-02 20:36 |只看该作者
这个问题,我认为可以通过重载malloc, calloc, free等函数实现,但是这样会不会造成循环调用不太清楚,,,
最保险的方法,把malloc, calloc, free定义成宏,debug版本的时候,使用自己的实现,release的时候,使用库里的实现。。

论坛徽章:
0
4 [报告]
发表于 2010-05-02 20:44 |只看该作者
valgrind

论坛徽章:
0
5 [报告]
发表于 2010-05-02 20:56 |只看该作者
包装malloc和free,malloc的时候创建一个节点记录一些数据,free的时候标记这个节点。最后遍历这个链表,没有被标记的就是没有被free,根据节点保存的信息来找原因。
===========================================
lz是个很强悍的人。

论坛徽章:
0
6 [报告]
发表于 2010-05-02 21:04 |只看该作者
valgrind 基本都能查出来

有许多现成的库包装了malloc/free

以前曾经在项目中造成了内存泄露,后来发现原因是使用第三方库的时候,一个句柄没有关闭,导致现在对内存泄露深恶痛绝!

论坛徽章:
0
7 [报告]
发表于 2010-05-02 21:11 |只看该作者
这是就是说起来容易做起来难!

论坛徽章:
1
天秤座
日期:2014-04-27 07:42:20
8 [报告]
发表于 2010-05-02 21:53 |只看该作者
杜绝计划外的内存使用,就不会有泄漏产生了。比较有效的办法是把需要使用的内存预先分配,然后用链表标记地址和使用状态。使用过但已经释放(过期)的空间直接写入新的内容就行了,无需再次分配空间也无需回收空间。

论坛徽章:
0
9 [报告]
发表于 2010-05-03 01:25 |只看该作者
累。

写代码的时候尽量保证malloc和free在一个函数里。还有就是写代码的时候一般都自己把这类函数包一下来用。

gcc里有默认的工具应该,可以检查malloc、free出现了多少次,也可以检查哪个函数共被调用了多少次的。印象中编译的时候加一个参数就成了。然后用gcc的工具就可以看到结果。

其实内存泄漏是实际工程中最容易犯的也是最不容易debug的一类错误。面试的人问你,最希望的结果是你加入他们的团队后养成好习惯不要犯这类错误。。。

其他语言,如java,不是有动态内存回收机制吗?

论坛徽章:
2
青铜圣斗士
日期:2015-11-26 06:15:59数据库技术版块每日发帖之星
日期:2016-07-24 06:20:00
10 [报告]
发表于 2010-05-03 02:14 |只看该作者
不写有内存泄露的代码即可
检测防范什么的就免啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP