CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Linux/Unix社区 >  内核及驱动程序研究区

探讨一下关于内存申请与释放的问题!!

楼主shirensong(二子)2005-04-01 16:45:29 在 Linux/Unix社区 / 内核及驱动程序研究区 提问

int   main()  
  {  
      int   i;  
      char   *temp;  
      char   *msg="helleleleleleleleleleelleleellelelelelelelelelellelelelelelel";  
  for   (i=0;i<1000000;i++)   {  
    temp=(char*)malloc(strlen(msg)+1);  
    strncpy(temp,msg,strlen(temp));  
  }  
  return   0;  
  }  
   
  这个程序运行完,系统的内存会减少么?或者把msg的字符数改的更大,或者把循环改的更大。  
   
          我在linux下,运行过程中用top看,内存会急剧减少,但是只要程序运行一结束,内存就会恢复正常。可见内核提供了回收机制。似乎malloc后,可以不调用free。那么只要我们编写的不是守护进程,程序一结束内存就会由系统自动回收。即便是守护进程消耗了大量内存,只要没有死机,我们只要kill掉它也就能够回收内存。  
   
          那么某些书上说,编个小程序:malloc一个而没有free掉,就说内存泄漏,如果再多次运行的话,会导致内存耗尽,岂不是不太合理么?          
   
          也许我的观点有问题,本人对linux下进程的内存分配与回收还不是很了解,不知道大家有什么看法??  
           
   
  问题点数:20、回复次数:3Top

1 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-04-01 16:51:19 得分 20

这个……  
   
  汗……楼主似乎不知道你在进程里面分配的内存全都是进程空间的虚拟地址?这些东西在进程正常结束(或者是被咔嚓掉)都会被释放的……  
   
  但是如果malloc不free,最终会导致4G的进程空间耗尽(你要是用64位系统,就当我没说,估计除非是非常耗内存的东西,否则基本上提供的周期也够你玩了……另外,你能使用的只有3不到,还有1G是给kernel的),然后你的进程就被kernel咔嚓了……Top

2 楼shirensong(二子)回复于 2005-04-01 17:00:30 得分 0

嗯,我知道,虚拟地址最终都要实际的内存中去申请的。  
   
  我的意思是只要我malloc不是太多,程序运行的时间不算太长,而且每次都会正常终止,那我编程序就算不free,也不会造成物理内存泄漏啊。。。。。。(我理的不是太清楚^_^)Top

3 楼nodummy(三甲 之 Linux/Unix里面甭给我分,谁给我分我和谁急)回复于 2005-04-01 17:42:09 得分 0

就是如此,不过光malloc,不free实在是一种值得严重BS的行为……Top

相关问题

  • SetLength申请的内存如何释放?
  • 如何动态申请内存和释放内存
  • 关于内存申请与释放的问题
  • 怎么才能释放GlobalLock申请的内存空间?
  • 在dllMain中申请的内存如何释放?
  • 如何释放链表中申请节点的内存?
  • 一个内存申请和释放的问题
  • 释放内存
  • 内存释放
  • 内存释放

关键词

  • char

得分解答快速导航

  • 帖主:shirensong
  • nodummy

相关链接

  • CSDN Blog
  • 技术文档
  • 代码下载
  • 第二书店
  • 读书频道

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo