学习型 ASP/PHP/ASP.NET 主机 30元/年全能 ASP/PHP/ASP.NET 主机,支持月付专业 MSSQL 数据库空间,支持月付专业 MySQL 数据库空间,支持月付
 11 12
发新话题
打印

内存泄漏问题

内存泄漏问题

哪位朋友可以告诉我,监测内存泄漏有哪些方法啊?不是监测工具,而是技术哟?而且要监测的dll组件是没有源代码的




谢谢各位的回复,但是我感觉好像没什么我想要的答案呢。估计是我的问题没说明白吧
是这样的,我的论文题目老师初步定在通过动态监测检查内存泄漏的情况。这个项目是开发一个组件测试工具,我负责其中的动态监测模块。原本是用c++写的代码,但是现在老师想改成c#。至于内存监测,是能用c#写就用c#,万一不行就用c++。我在网上搜了很多关于内存泄漏的方法,但是貌似都是介绍的工具,而且好像都是针对已知程序的检测。现在我要检测任意一个dll组件,是没有源文件的,针对这种情况我要如何检查它的内存泄漏情况呢

[ 本帖最后由 bluesky815 于 2008-5-9 11:32 编辑 ]

TOP

我一般是开任务管理器看……Orz……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

指针惹的祸,生成而不释放,造成请求的内存没办法被释放..就没办法被重用..内存被用光..很可怕...一般用工厂化模式解决也可以同auto_ptr..lz说的不明白..在java里面有专门的垃圾回收器

[ 本帖最后由 sunkaidong 于 2008-5-8 16:58 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

sun啊……C的哲学是完全信任程序员,所以才将一切底层都暴露出来。如果程序员不能承担这种信任,就不要用C。C是永远不会有垃圾回收这种对程序员透明的东西的。
这里是C区,不是Java区。Java是给不愿意为自己的错误负责的人用的。
内存申请不释放,永远是程序员的错误,而不是语言的错。说C的内存管理是缺陷的人,全是贪图享乐不负责任的渣滓。
修改了一点。Java其实也不是一无是处。
其实对于垃圾回收。我喜欢异常式的。就是一发现未手工回收的内存,如果是Debug就异常报错然后DumpCore。如果是Release就默默无闻地回收掉。这样对大家都好。实现起来,其实也不难。
C++09也开始有垃圾回收了。对于这个只有叹气的份儿。C++堕落了啊……不过如果C++的垃圾回收是上面说的那种模式那当然鼓掌欢迎啦。最怕的是Java式的透明回收过程。内存还无所谓,要是类里面有贵重资源岂不是要占用到回收的时候?而且有了垃圾回收,搞得连析构机制都没法用,需要释放贵重资源还要手工调用。整个反古了……

[ 本帖最后由 StarWing83 于 2008-5-8 17:54 编辑 ]
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

      __      __
    \|\_ \    ∠ /|/
       |○|    |○|
_| ̄|○             ○| ̄|_
     / /|)  (|\ \
    | ̄|        | ̄|
   / /         \ \
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

翅膀兄弟的话很正确..不过java也在提高效率哦..呵呵b/s和c/s还是很赚钱的啊...java只对超出生命期限的变量回收啊,就是说一旦没了引用,才触发回收,和c++的析构也一样..可以把回收当析构用哦..除了java是半编译半解释型语言效率得不到保证外..其它的c++和java也差不多了..混合了两个优点的就是c#了...

[ 本帖最后由 sunkaidong 于 2008-5-8 18:16 编辑 ]
学习需要安静。。海盗要重新来过。。

TOP

回复 9# 的帖子

不一样。
在Java中,超出作用域的不一定会马上回收。而是在内存不足的时候,才进行检查和回收。所以才会被叫做“垃圾”回收。但是,如果是贵重资源(比如网络链接,GDI内存,数据库句柄等),就会因为得不到及时的回收而消耗资源。这是Java迄今已来最大的问题。.Net的垃圾回收也面临了这种问题。但是.Net定义了一个Dispose的操作,相当于析构。但是需要手动调用。没有C++的析构的便利性。特别的,在异常发生的时候,C++是自动调用析构函数,而.Net如果设计不当,Dispose函数得不到调用的话,就会导致资源的占用。
所以,垃圾回收其实是治标不治本,而且得不偿失的东西。用来做安全性检测还不错。但是如果全部都依赖它的话,肯定会造成系统性能整体的下降。
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

最近忙完要好好复习下书..翅膀你大几了?
学习需要安静。。海盗要重新来过。。

TOP

监测堆的大小,如果这个dll加载前和释放后堆变小就是泄漏了呗,
如果有多个任务会申请内存,就将任务ID和申请内存的大小记录在表中,
释放的时候查表就可以了
“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!

TOP

大二……长路漫漫啊……
专心编程………
飞燕算法初级群:3996098
我的Blog

TOP

 11 12
发新话题