返回信息流☆─────────────────────────────────────☆
quanquan (~江南西少女的祈祷~) 于 (Mon Mar 29 19:33:40 2010) 提到:
今天面试被问道,不通过其他软件跟肉眼,如何查找程序中的内存泄漏。不知道怎么回答。求助。
☆─────────────────────────────────────☆
allen0308 (九河下梢||明光村小村长) 于 (Tue Mar 30 08:52:00 2010) 提到:
莫非是用stack实现new/delete,malloc/free匹配
【 在 quanquan 的大作中提到: 】
: 今天面试被问道,不通过其他软件跟肉眼,如何查找程序中的内存泄漏。不知道怎么回答。求助。
☆─────────────────────────────────────☆
mmgroup (からす) 于 (Tue Mar 30 09:07:17 2010) 提到:
不通过肉眼....
你倒不如说不使用内存....使用内存的某种意义上来讲都是泄露....
期待正确答案
☆─────────────────────────────────────☆
coolwc (小包) 于 (Tue Mar 30 09:15:31 2010) 提到:
不通过其他软件是指不用valgrind这种动态检查内存的软件
不通过肉眼是指不去人工一行一行检查代码
标准答案是 提高压力 看内存的增长情况 降低压力 看内存的恢复情况
【 在 quanquan (~江南西少女的祈祷~) 的大作中提到: 】
: 今天面试被问道,不通过其他软件跟肉眼,如何查找程序中的内存泄漏。不知道怎么回答。求助。
☆─────────────────────────────────────☆
lisanwan (04401留守小分队之三儿) 于 (Tue Mar 30 09:20:49 2010) 提到:
标准答案是 提高压力 看内存的增长情况 降低压力 看内存的恢复情况
我一直这么做
☆─────────────────────────────────────☆
landiya (landiya) 于 (Tue Mar 30 09:42:25 2010) 提到:
提高压力,降低压力是什么意思
具体手段是什么
【 在 lisanwan 的大作中提到: 】
: 标准答案是 提高压力 看内存的增长情况 降低压力 看内存的恢复情况
: 我一直这么做
☆─────────────────────────────────────☆
hs (HelloWorld!) 于 (Tue Mar 30 10:05:40 2010) 提到:
如果真有一个完美的解决方案就不会存在那么多的内存泄露了,1楼的方法很靠谱
☆─────────────────────────────────────☆
bylee (bylee) 于 (Tue Mar 30 12:09:44 2010) 提到:
【 在 landiya 的大作中提到: 】
: 提高压力,降低压力是什么意思
: 具体手段是什么
不断的重复运行。
☆─────────────────────────────────────☆
DIRK41 (Rubio) 于 (Tue Mar 30 13:02:56 2010) 提到:
学习
☆─────────────────────────────────────☆
shunshine (shine) 于 (Tue Mar 30 14:10:34 2010) 提到:
期待更合理更好的答案。。。
☆─────────────────────────────────────☆
noname (无名亡者) 于 (Tue Mar 30 14:50:16 2010) 提到:
把所有可能泄露的东西,在new和delete的时候,都把指针的类型和地址输出到一个文件
再自己写个脚本晒一下
☆─────────────────────────────────────☆
grapland (grapland) 于 (Tue Mar 30 15:04:34 2010) 提到:
顶1L,有时候只会漏很小一点,并且泄漏的内存大小相对于压力是常数的,这就很难通过这个方式查出来.
个人认为还是重写malloc/free/delete/new好一点.
☆─────────────────────────────────────☆
potatossss (薯仔) 于 (Tue Mar 30 17:33:43 2010) 提到:
靠谱吗。。。释放语句应该多于等于分配语句啊,怎么匹配啊。
【 在 hs 的大作中提到: 】
: 如果真有一个完美的解决方案就不会存在那么多的内存泄露了,1楼的方法很靠谱
☆─────────────────────────────────────☆
command (command) 于 (Tue Mar 30 17:54:42 2010) 提到:
写个宏对malloc和free的调用次数进行统计,最后打出结果,如果两者一样,就基本认为没有泄露~~
☆─────────────────────────────────────☆
chenwei19850 (威仔) 于 (Tue Mar 30 19:09:25 2010) 提到:
高手呀
☆─────────────────────────────────────☆
tfei (tfei) 于 (Tue Mar 30 20:02:49 2010) 提到:
封装 new/delete,malloc/free ,将指针报存在链表里,对链表进行维护。
☆─────────────────────────────────────☆
Mouse (小老鼠) 于 (Tue Mar 30 20:25:03 2010) 提到:
记录内存的申请总数和释放总数
☆─────────────────────────────────────☆
chopin19 () 于 (Tue Mar 30 23:36:32 2010) 提到:
智能指针分配内存 否则应该不能避免
☆─────────────────────────────────────☆
seacooker (seacooker) 于 (Wed Mar 31 00:40:13 2010) 提到:
运行起来程序以后
打开任务管理器看看有没有内存异常
☆─────────────────────────────────────☆
jokerlee (Jackal The Dire) 于 (Wed Mar 31 07:52:46 2010) 提到:
基于new/malloc匹配的都不考谱,很多内存分配都没有显式调用new和malloc,尤其是在面向对象的C++代码里,大多数内存分配都是在构造函数或者某个成员函数中完成
最直接的办法就是压力测试
☆─────────────────────────────────────☆
ensonlittle (Enson) 于 (Wed Mar 31 10:47:12 2010) 提到:
我觉得最好的办法就是用工具。
如果实在不行的话,那么就多跑一段时间,不一定要很大的load,只要时间足够长并且保持一定的系统负载,你就会发现内存泄露的。
☆─────────────────────────────────────☆
tfei (tfei) 于 (Wed Mar 31 20:36:41 2010) 提到:
【 在 jokerlee 的大作中提到: 】
: 基于new/malloc匹配的都不考谱,很多内存分配都没有显式调用new和malloc,尤其是在面向对象的C++代码里,大多数内存分配都是在构造函数或者某个成员函数中完成
: 最直接的办法就是压力测试
: --
: ...................
那也是通过new malloc 进行分配内存。 new malloc又是通过调用系统的内存接口进行分配。 故只需要对分配到的指针进行管理,匹配即可。
☆─────────────────────────────────────☆
simonsu (rain) 于 (Wed Mar 31 20:50:08 2010) 提到:
曾经写过一个循环处理程序,后发现机器逐渐变慢,非常非常慢,非常非常非常慢,任务管理器中看到内存占用达到了3G(当时我机器只有1G内存)并不断上升中,遂知有内存泄露。。。
对于相对小的测试单元,我想多循环调用几次就能发现吧(比如1k,10k,100k次?)。
☆─────────────────────────────────────☆
plmssc (风中呼吸) 于 (Wed Mar 31 23:10:41 2010) 提到:
重载new,malloc,free,delete在分配的时候记录分配的位置,在释放的时候删除记录
☆─────────────────────────────────────☆
TLZL (细水长流) 于 (Sat Apr 3 10:23:46 2010) 提到:
学习了
☆─────────────────────────────────────☆
Rill (囧囧有神) 于 (Sat Apr 3 11:58:48 2010) 提到:
做压力测试,看申请的和释放的是否一致
☆─────────────────────────────────────☆
nickluchen (Octopus Z) 于 (Sat Apr 3 12:42:34 2010) 提到:
重写malloc函数替代库里的版本
☆─────────────────────────────────────☆
codeguru (codeguru) 于 (Sat Apr 3 20:15:29 2010) 提到:
标准库或MFC中都提供了内存泄漏检测机制
如类似CrtDumpMemoryLeaks函数
不知道是不是问的这种情况
一般内存泄漏检测过程:
程序运行资源使用异常
->debug模式使用库提供的机制如上述函数,会在程序运行退出时给出内存泄漏信息
->使用内存泄漏检测工具如BoundsChecker等
->很少有自己重载operator new/delete(C++下)的
无论怎样,本质都是跟踪检测类似new,malloc这样的资源分配函数,看是否进行了相应的delete,free操作。没有则认为发生泄漏。
【 在 quanquan 的大作中提到: 】
: 今天面试被问道,不通过其他软件跟肉眼,如何查找程序中的内存泄漏。不知道怎么回答。求助。
☆─────────────────────────────────────☆
LoveRose (Ericlub|路过团镇团正太) 于 (Tue Apr 6 16:11:57 2010) 提到:
智能指针?
☆─────────────────────────────────────☆
richlm (银剑山庄) 于 (Thu Apr 8 12:24:31 2010) 提到:
学习啦!
☆─────────────────────────────────────☆
never115 (竹马) 于 (Sat Apr 10 10:41:57 2010) 提到:
重载new和delete,然后记录代码的行号,这样就可以了~~~~~当初面试的时候被问到了。。。~~~~~~~~~
☆─────────────────────────────────────☆
KevenStar (雨落星辰) 于 (Wed Apr 14 11:17:38 2010) 提到:
1. 如果是已经编译好的程序,查找内存泄漏,那就只能通过window等操作系统程序调试(不是调试代码,是使用底层调试工具来查看,这个很难。。。。 或者说非常难)
2. 有源代码的情况下,逐段逐行分析源码。。。。 还有一个方法,编写调试函数(统计堆栈和内容使用)
☆─────────────────────────────────────☆
vist (penetrate) 于 (Thu Apr 29 17:31:27 2010) 提到:
meat eye?
☆─────────────────────────────────────☆
lsy110 (minibird) 于 (Thu Apr 29 23:16:31 2010) 提到:
重载应该靠谱些,这个是在任何情况下都可以的
☆─────────────────────────────────────☆
aisanbudemao (asianbudemao) 于 (Sun Jul 18 02:02:51 2010) 提到:
_CrtMemState s1, s2, s3;
_CrtMemCheckpoint( &s1 );
语句......
_CrtMemCheckpoint( &s2 );
_CrtMemDifference( &s3, &s1, &s2);
然后 看s3 如果有值 代表有泄漏
以前 好像试过 不过得加个头文件
☆─────────────────────────────────────☆
Bluerainer (Blue) 于 (Sun Jul 18 18:32:12 2010) 提到:
被挖坟了啊
☆─────────────────────────────────────☆
dodolzg (dodolzg) 于 (Mon Jul 19 19:29:12 2010) 提到:
同意压力测试~
☆─────────────────────────────────────☆
fuqiang (fuqiang) 于 (Fri Jul 23 13:38:39 2010) 提到:
Debug模式下,窗口->内存,可以有4个~~
这是一条镜像帖。来源:北邮人论坛 / cpp / #42285同步于 2010/8/10
CPP机器人发帖
[合集] 一道内存泄漏的面试题
shenlei
2010/8/10镜像同步0 回复
订阅后,新回复会通过你的通知中心匿名送达。
0 条回复
暂无回复 · 你可以订阅本帖等待新回复。