当前位置:  技术问答>linux和unix

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

    来源: 互联网  发布时间:2015-02-05

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

在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下有没有什么命令可以看到当前的可用内存是多少?

    
 
 

您可能感兴趣的文章:

  • linux下通过crond实现自动执行程序
  • 为什么linux下的C++程序这么少见? 请问那里有linux下的C++程序?什么类型的程序都可以.
  • Linux下指定运行时加载动态库路径及shell下执行程序默认路径
  • linux上的程序怎样远程启动另一个linux系统上的某个程序
  • 如何使用linux下gdb来调试python程序
  • 在linux下面怎么安程序啊?我刚裝了一个 linux,下了一个迅雷安装程序,可是不知道怎么安装啊?真心请教。
  • Linux下c/c++开发之程序崩溃(Segment fault)时内核转储文件(core dump)生成设置方法
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户
  • Linux程序员在公司里做什么程序?(Linux程序员请进)
  • 我的linux程序 如何 在pc机器上运行。现在我用arm-linux-g++ 编译后的程序在我的嵌入设备上运行。
  • Linux 编程怎么样在程序开启一个程序,和关闭一个程序?
  • Linux下的程序是在内存中运行的吗?为什么在程序运行的时候可以删除程序文件?
  • 请指点: 在windows下能否通过程序来获取linux下的用户列表,甚至通过自己写的windows程序界面增加修改linux的用户 100分相赠
  • 请教!Linux系统C开发的程序,为什么我的程序运行时内存持续增长,程序退出后内存也没有降低? iis7站长之家
  • 最进想学习LINUX程序设计,想了解一下在LINUX下的C++程序开发工具有哪些?有快速做界面的那种吗?
  • 我写了个linux下的网络程序,程序在多个电脑间通信,但是我没有多个电脑,怎么调试这样的程序啊?
  • linux下,一个程序如何向另一个程序发送消息,另一个程序如何接收
  • 请问载linux下如何调试汇编程序,有没有像debug的程序。
  • linux的程序员是不是比windows程序员的薪水高啊?
  • 菜鸟求助:Linux 应用程序后台启动后关闭窗口程序退出
  • 请教:如何在linux服务器上实现一个程序,该程序可启动远程linux客户端上的一个脚本(sh后缀)的执行
  • 为什么在其它机器上用telnet登陆不了我的linux?
  • 各位老大,都晒晒您在linux上用的是什么影音播放器?支持图形界面吗?
  • 怎么在linux上用zlib库写一个简单的文件压缩程序?
  • 请推荐一个配置要求低linux安装,我打算装上用来学习在linux上面做开发
  • 小弟试了几天,failed!--基本上用源代码安装linux?
  • 在Linux上用C语言编写的函数里面申请了一块内存,并且返回这块内存,最终它需要释放吗?
  • 请问大家在LINUX上用什么来开发! KDeveloper?
  • 在linux上用tar压缩一个文件后到windows上解压缩出现乱码
  • linux上用gcc编译c程序老出错
  • 怎么在linux上用c程序调用mysql数据库,可以给一段例子么?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux下free命令显示的内存使用情况分析
  • 哪位前辈给解释下linux下虚拟内存和物理内存的关系!
  • Linux内存文件系统(ramdisk)的三种实现方式
  • linux下内存泄露检测工具 mtrace 如果记录.so文件中的内存信息
  • linux内存文件系统ramfs实现原理
  • 有人熟悉DMA吗?我要实现内存中的内存的“搬动”。(LINUX)
  • linux下进程占用内存空间详解
  • 如何让linux没有到达内存瓶颈时回收内存页并占用最少资源
  • Linux 共享内存介绍及实现代码
  • 请教关于linux内存管理问题,如何给定义的变量指定固定内存段
  • Linux/Centos/Ubuntu清除系统缓存释放内存命令介绍
  • 大家好,我想问下有人用过"linux进程的内存使用解析"中推荐使用的"Ben Maurer写的perl脚本"查看内存么
  • linux下进程间通信:共享内存原理及具体用法举例(基于c/c++语言)
  • 在SUSE linux下jar文档的运行,提示内存泄露,指定最大最小内存后只能在十几分钟才能打开,求各位大虾指点!
  • 我的redhat linux7.3因为内存有些少,所以我想随时查看内存的使用情况该如何去做,还有我想关掉(而不是切换)图形界面应该用什么命令
  • 请教!Linux系统C开发的程序,为什么我的程序运行时内存持续增长,程序退出后内存也没有降低?
  • 虚拟机上的Linux怎么修改Linux内存
  • 问个LINUX内存分配的问题。
  • linux9.0下内存占用一直是95%以上怎么解决
  • linux下查看java项目虚拟内存很大,请高手指点下
  • linux可不可以设置虚拟内存
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3