免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12345
最近访问板块 发新帖
楼主: foxpro7
打印 上一主题 下一主题

MALLOC空间后不释放,进程EXIT后,这块内存会释放给操作系统? [复制链接]

论坛徽章:
0
41 [报告]
发表于 2008-08-04 16:12 |只看该作者
汗,怎么随盘的那张协议上写的是“同时只能激活一台电脑”
OK,查站内短信吧
收到请在这里回复,留念

兄弟小心啊,别让我的80¥废了

flw:把手机号发我

[ 本帖最后由 reiase 于 2008-8-4 16:14 编辑 ]

论坛徽章:
0
42 [报告]
发表于 2008-08-04 16:14 |只看该作者
原帖由 flw 于 2008-8-4 16:02 发表

你加我 QQ:116544783 聊,不然版主该有意见了。

敢对老上司下手?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
43 [报告]
发表于 2008-08-04 16:15 |只看该作者
原帖由 reiase 于 2008-8-4 16:12 发表
汗,怎么随盘的那张协议上写的是“同时只能激活一台电脑”
OK,查站内短信吧
收到请在这里回复,留念

兄弟小心啊,别让我的80¥废了

flw:把手机号发我

http://forum.byr.edu.cn/wForum/d ... ;ID=29873&pos=1

论坛徽章:
0
44 [报告]
发表于 2008-08-04 19:20 |只看该作者
关键要看进程是否正常结束?
1)正常结束:回收(不一定立即。要看系统的垃圾回收策略。)
2)dump至core:同上。
3)进程变成僵尸:不回收。

论坛徽章:
0
45 [报告]
发表于 2008-08-05 19:00 |只看该作者

回复 #14 mik 的帖子

内存泄露,在程序里是指的那些你分配了的,但却又没有办法引用到的那些,比如下面的:
int b;
int* a = (int*)malloc(sizeof(int));
a = &b;
你把a原来的值,就是动态分配到的,丢掉了,你之后怎么去引用到这段内存呢?这就造成了所说的内存泄露,并不是指的其他什么,而是你程序中不知道怎么去找回这段内存在哪里了,因此白白浪费了.

而这些资源的使用,自然操作系统有登记在案,只要你获的的,它就有记录,所以不管你泄露了多少,程序一退出,操作系统收当.

论坛徽章:
0
46 [报告]
发表于 2008-08-05 21:36 |只看该作者
原帖由 mik 于 2008-8-3 19:54 发表
会的话还存在内存泄露的情况么?


exit的时候操作系统会回收所有资源。

至于内存泄漏,是指长期运行的程序。
比如daemon,每分钟泄漏1k。过不了多久内存就都被他霸占了。它退出之前其他程序都无法获取内存了。但是一旦此daemon挂掉了,他的资源就被操作系统回收了。

论坛徽章:
0
47 [报告]
发表于 2008-08-19 22:26 |只看该作者
原帖由 beepbug 于 2008-8-4 19:20 发表
关键要看进程是否正常结束?
1)正常结束:回收(不一定立即。要看系统的垃圾回收策略。)
2)dump至core:同上。
3)进程变成僵尸:不回收。



我看这位兄弟有些误导人,忍不住纠正一下

第1个不一定立即回收是指什么意思?分配给进程的内存,只要进程一退出系统是立即回收的,但类似打开的文件节点之类的资源系统会暂时缓存起来,以便其它进程再打开此文件就可以立即从缓存中获取此节点,但是如果长时间再没有进程打开此节点,系统会定时清理这些缓存,或者系统可利用的空闲内存不足时,系统也会清理这些缓存的

第3个就有点扯了,不管进程以何种方式退出,系统都要回收分配给进程的资源的,僵尸进程只不过是进程退出后系统没有释放进程的进程控制块,该控制块只是保留了进程运行的一些状态信息,以便让父进程获取这些信息,这些信息包括进程运行时间,返回状态等,其它分配给进程的资源类似打开文件,内存等系统都是要回收的,如果不回收那就是系统设计的问题了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP