标题:内存泄漏问题
只看楼主
bluesky815
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-5-8
 问题点数:0 回复次数:10 
内存泄漏问题
哪位朋友可以告诉我,监测内存泄漏有哪些方法啊?不是监测工具,而是技术哟?而且要监测的dll组件是没有源代码的




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

[[it] 本帖最后由 bluesky815 于 2008-5-9 11:32 编辑 [/it]]
搜索更多相关主题的帖子: 内存 源代码 泄漏 监测 动态 
2008-05-08 15:05
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
我一般是开任务管理器看……Orz……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 16:42
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
指针惹的祸,生成而不释放,造成请求的内存没办法被释放..就没办法被重用..内存被用光..很可怕...一般用工厂化模式解决也可以同auto_ptr..lz说的不明白..在java里面有专门的垃圾回收器

[[it] 本帖最后由 sunkaidong 于 2008-5-8 16:58 编辑 [/it]]

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

[[it] 本帖最后由 StarWing83 于 2008-5-8 17:54 编辑 [/it]]

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 17:28
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
      __      __
    \|\_ \    ∠ /|/
       |○|    |○|
_| ̄|○             ○| ̄|_
     / /|)  (|\ \
    | ̄|        | ̄|
   / /         \ \

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 17:39
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
翅膀兄弟的话很正确..不过java也在提高效率哦..呵呵b/s和c/s还是很赚钱的啊...java只对超出生命期限的变量回收啊,就是说一旦没了引用,才触发回收,和c++的析构也一样..可以把回收当析构用哦..除了java是半编译半解释型语言效率得不到保证外..其它的c++和java也差不多了..混合了两个优点的就是c#了...

[[it] 本帖最后由 sunkaidong 于 2008-5-8 18:16 编辑 [/it]]

学习需要安静。。海盗要重新来过。。
2008-05-08 17:45
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
回复 9# 的帖子
不一样。
在Java中,超出作用域的不一定会马上回收。而是在内存不足的时候,才进行检查和回收。所以才会被叫做“垃圾”回收。但是,如果是贵重资源(比如网络链接,GDI内存,数据库句柄等),就会因为得不到及时的回收而消耗资源。这是Java迄今已来最大的问题。.Net的垃圾回收也面临了这种问题。但是.Net定义了一个Dispose的操作,相当于析构。但是需要手动调用。没有C++的析构的便利性。特别的,在异常发生的时候,C++是自动调用析构函数,而.Net如果设计不当,Dispose函数得不到调用的话,就会导致资源的占用。
所以,垃圾回收其实是治标不治本,而且得不偿失的东西。用来做安全性检测还不错。但是如果全部都依赖它的话,肯定会造成系统性能整体的下降。

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 20:21
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
得分:0 
最近忙完要好好复习下书..翅膀你大几了?

学习需要安静。。海盗要重新来过。。
2008-05-08 21:04
moonwalker
Rank: 1
等 级:新手上路
威 望:1
帖 子:909
专家分:2
注 册:2007-3-2
得分:0 
监测堆的大小,如果这个dll加载前和释放后堆变小就是泄漏了呗,
如果有多个任务会申请内存,就将任务ID和申请内存的大小记录在表中,
释放的时候查表就可以了

“视频教程网”免费提供教学资源
C不限制你的自由!
条件是自己承担滥用自由的恶果!
2008-05-08 22:00
StarWing83
Rank: 8Rank: 8
来 自:仙女座大星云
等 级:贵宾
威 望:19
帖 子:3951
专家分:748
注 册:2007-11-16
得分:0 
大二……长路漫漫啊……

专心编程………
飞燕算法初级群:3996098
我的Blog
2008-05-08 22:02



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-213173-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.415835 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved