linux运行python程序占用内存越来越大_在Linux上用C语言作了一个程序,程序中申请(malloc)了很大的内存,但是没free,当程序运行结束后,内存是否自动释放?...

在Linux上用C语言作了一个程序,程序中申请(malloc)了很大的内存,但是没free,当程序运行结束后,内存是否自动释放?也可一这样说,当一个进程结束了,是否他的所有的内存资源都会自动释放呢?

main()

{

char *tmpstr=malloc(1024*1024*100);//申请100兆内存

}

当这个程序运行完后这100兆内存是否自动随进程结束而释放了呢?

|

会。 进程结束时,操作系统会回收该进程所申请的资源,关闭所有未关闭的句柄.

不过建议还是自己管理比较好。

|

分配给进程的资源同进程本身有相同的生命周期,

|

不会

用malloc和new分配的内存要自己用free和delete释放

不然会产生内存泄漏

|

目前只有solaris系统能够回收未被释放的内存。

在linux上用malloc和new分配的内存,如果不用free和delete释放,将会出现内存泄漏,该内存将不会被任何程序访问,如果大量的内存泄漏将耗尽系统内存资源,系统将崩溃,因此在开发商业软件是一定不能出现内存泄漏问题。

|

运行几次你的程序,然后用free看看就知道了!

|

这个肯定不会的!

|

会!但是如果是服务性的程序请释放。

要养成良好的编程习惯。

|

谁也不应该总是让别人为自己收拾残局。

|

一段时间内是不会的,最后linux 内存管理能够将它释放。

|

会。

进程结束后,操作系统帮你回收的没有释放的内存的。

SGI STL 标准库有自己设计构建器。为了避开内存碎片,SGI实现上,

当申请的内存空间小于1024bytes的时候,就是只有向操作系统申请,

却从不释放交还给操作系统,而是自己管理。等到进程结束了,一次释放。

|

一段时间内是不会的

|

其实,未被释放的内存是否被回收,是与操作系统内存管理的实现有关。例如你在Microsoft Windows和HP UNIX上不释放内存,该内存是永远不会被系统和应用程序再次使用。目前只有SUN solaris能够正确释放掉应用程序未释放的内存,至于linux是否也有这种功能,需要对它的内存管理进行研究,总之,开发软件时,必须用free或delete释放内存。

|

会...

不必讨论实现的原理机制,这是操作体统最基本的功能,试想一下,如果一个操作系统连这个都保证不了,那它如何保持操作系统的长期运行和稳定性?

|

楼上说的有利!!!!

|

再举一个例子,简单操作系统,如嵌入式操作系统VxWorks,如果在它上运行的程序如果出现内存泄露,VxWorks是无法收回该内存的。如果操作系统为了维护,上层应用产生的内存泄露异常所泄露的内存,它付出的代价将影响系统的实时性。因此,各个操作系统对于该系统的设计要求不同,对内存管理的实现是不同的。

许多商业软件都会用专业软件检测内存是否泄露,如rational purify.

这个问题没有必要再讨论下去,总之,开发可靠的商业软件必须防止内存泄露,释放掉不在实用的内存块。

|

to lovegreen(lovegreen):

兄弟,麻烦你搞清楚再说,在windows下,你申请的内存,如果你自己没有free调,在进程结束时,系统会释放的。因为内存也是与进程相关的资源,进程结束时,所有这个进程申请的资源都会释放,也包括内存,不管进程是正常结束还是异常终止。如果不信,自己写个小程序测试一下。

自己没搞清楚的,千万不要乱说,会误导的。

当然,自己的时最好自己干,自己申请的资源,最好自己释放,不能过分依赖系统。

|

我认为是会回收的。因为malloc 申请的应该是用户进程的内存空间,申请内核空间要用kmalloc。用户进程结束的时候,进程所有的空间都应该被OS自动释放,进程申请的内核资源应该不会被OS主动释放。但是自己释放是一个好习惯。分配100M这么大的空间应该对性能影响很大。比如STL的内存池,就只有先申请一次,一直没有释放。

|

大家有看过分页和虚拟内存么?我们malloc的内存,总是和process地址空间相关的。如果进程结束了,进程的地址空间还有意义么。

不管是堆还是栈,最终都会映射到物理内存页面上,释放与否,无非是一个标志位的问题。

我以为,写操作系统的人,这个基本功能总会实现吧。注意,这不是gc,这是在进程退出时执行

的操作,不涉及扫描,不会影响系统性能。

欢迎讨论,也希望有牛人能做出权威的解释。

|

没有调查就没有发言权:-}

我已在Windows和Xterm Linux上进行了测试,在程序未用free或delete释放的内存,确实在退出后被释放掉,但在HP-UX上的测试没有做。

谢谢,ddong,sttony,bnwxf及时提出疑异。

|

sco下有没有什么命令可以看到当前的可用内存是多少?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值