Chinaunix

标题: 问大家一个关于内存释放的问题,多谢高手帮忙 [打印本页]

作者: fxhnkf    时间: 2004-12-08 16:05
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
我使用malloc函数申请的内存资源,如果不用free函数释放的话
在进程结束的时候这些内存资源是不是被释放了呢?
我认为应该是的,因为使用malloc是在本进程的堆区分配的内存资源,在本进程结束时,本进程的内存映像都已经全部被释放了,这部分内存资源当然也应该被释放掉!
不知道小弟的观点对不对

或者说,在不同的unix实现下,有不同的处理方式??
作者: albcamus    时间: 2004-12-08 16:31
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
是。都释放
作者: zjBahamout    时间: 2004-12-08 16:53
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
谁说的?
malloc ->; brk() 最终建立page的映射,进程结束的时候,不会去除进程引用计数
作者: albcamus    时间: 2004-12-08 17:07
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
原帖由 "zjBahamout" 发表:
谁说的?
malloc ->; brk() 最终建立page的映射,进程结束的时候,不会去除进程引用计数


不好意思,什么是引用计数,能讲一下吗?我一向都是看到前一种观点,进程结束的时候OS负责释放它的空间。
作者: zjBahamout    时间: 2004-12-08 17:22
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
自动释放:
栈会
堆不会
作者: albcamus    时间: 2004-12-08 17:30
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
堆不会??????回去看书,倘若真的不会,那说明我需要重新建立以前对计算机的全部理解。
作者: zjBahamout    时间: 2004-12-08 17:38
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
顺着brk(), alloc_page()往下看
作者: albcamus    时间: 2004-12-09 08:19
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
什么栈会堆不会?害得我昨天看情景分析到凌晨,根本是用户空间全部释放、系统空间留给父进程去释放么。
作者: 思一克    时间: 2004-12-09 08:30
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
stack就没有释放的问题。
heap也会释放,所以程序既然要结束,就不需要free.
作者: albcamus    时间: 2004-12-09 08:35
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
原帖由 "思一克" 发表:
stack就没有释放的问题。
heap也会释放,所以程序既然要结束,就不需要free.


就是啊。所谓heap的内存泄漏什么的,也只是那些需要长期运行的进程,才需要很小心的。普通进程不管怎么样,反正结束时OS会收回空间,所以不是多严重的问题。

其实heap释不释放,想想都知道的,如果OS不停的启动/杀死进程(事实上就是这样),难道随着OS运行时间越来越长,可用虚存空间就越来越少?那这OS也太der了吧?
作者: aero    时间: 2004-12-09 08:50
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
呵呵,其实,很多人都不真正明白内存泄漏的概念呢。
作者: 思一克    时间: 2004-12-09 09:02
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
albcamus, aero 全都理解对。
用albcamus的话说,只有驻留的(长期运行的程序)才需要FREE
运行一会就退出的程序可以不free,退出时让OS完成。
作者: yuxh    时间: 2004-12-09 09:25
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
不free不是个好习惯啊~~
尽管在程序结束时系统会释放所占用的资源,但这不应成为偷懒的理由
现在是个程序,但也存在把它改成lib的可能,那时就出问题了,再说了,free一下会死人么?
对自己的代码负责,写程序的习惯也很重要啊!
作者: zjBahamout    时间: 2004-12-09 11:48
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
在do_exit():
__exit_mm();->;tsk_mm = NULL ?
作者: aero    时间: 2004-12-09 11:51
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
呵呵,内核看了不少。偶是没看过这些。不过写个测试程序,在用脚本不断的运行它,系统也是不会崩溃的啊。
作者: zjBahamout    时间: 2004-12-09 12:28
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
^o^
其实我对这个问题也一直很疑惑的说。我看kernel看的太粗了,用到的才仔细看看,其他的就带过去了说。呜呜。。。

大伙指点我一下吧。谢谢啦
作者: albcamus    时间: 2004-12-09 13:11
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
原帖由 "zjBahamout" 发表:
在do_exit():
__exit_mm();->;tsk_mm = NULL ?


tsk_mm = NULL之后,不还有mmput(mm)吗?mmput中做的就是最后又调用了mmdrop,连页面表、页面目录和mm_struct本身都释放了。这个时候进程剩下的就只有2个页面的系统空间堆栈和task_struct了,用户空间已经一点儿都不剩了。成为了zombie状态。

PS.俺是昨天晚上恶补的,看情景分析的第4章P320-P344,这要谢谢你了:)
作者: 思一克    时间: 2004-12-09 13:16
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
一个应用程序无论多么调皮捣蛋,在其运行生命期应该不会对OS系统留下任何痕迹(文件除外)。还有其它除外吗?(欢迎思考补充)
作者: playmud    时间: 2004-12-09 13:22
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
我理解的内存泄漏,当一块内存不用了以后仍然不能被其他程序所使用,还有就是乱用别人的内存.
看了很多帖子都说操作系统会释放malloc的内存.
作者: fxhnkf    时间: 2004-12-09 14:11
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
我是搂主,进来的果然都是高手,对系统分析得这么透彻
我是一个新手,请高手指点一下想要对系统了解的透彻,有什么好书可以看啊:):)
还有albcamus老兄提到的“情景分析 第4章P320-P344”,是哪一本书里的啊??
多谢了!!
作者: zjBahamout    时间: 2004-12-09 14:14
标题: 问大家一个关于内存释放的问题,多谢高手帮忙
oh, my god!


  1. 00318:        mmput(mm);
复制代码


这一句,硬是没看到,每次都看到enter_lazy_tlb,就溜过去了。

albcamus,谢谢啦。呵呵。

playmud:用户态下的进程,如果乱用别人的内存?也许改成资源泄漏更好些?像SYSV IPC不释放,倒是可以算是资源泄漏?




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2