免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1529 | 回复: 3
打印 上一主题 下一主题

[Linux] linux下malloc/free申请释放问题??? [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之辽宁
日期:2016-07-06 16:53:09
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-21 11:58 |只看该作者 |倒序浏览
本帖最后由 daxiguagg 于 2014-04-21 12:17 编辑
  1. malloc/free申请释放问题???
  2. 下面是模拟一个程序的执行情况。

  3. int main(int argc, char** argv) {
  4.     void *buf[2000];
  5.     int i=0,fds=2000;
  6.     for (i=0;i<fds;i++) //循环申请内存2000次,大概125MB
  7.     {
  8.         buf[i]=malloc(65536);//malloc函数分配内存,请求内存小于128K,malloc函数会调用brk系统调用,将_edata指针往高地址推
  9.         memset(buf[i],0,65536);//第一次访问已分配的虚拟地址空间的时候,发生缺页中断,系统负责分配物理内存,然后建立虚拟内存和物理内存之间的映射关系。
  10.     }
  11.     sleep(60);  //模拟等待处理一些工作。
  12.     for (i=0;i<1999;i++)
  13.     {
  14.         free(buf[i]);//循环释放,按理说free(buf[0]);到free(buf[1998]);已经释放了大量内存,但程序依然占用125MB。是因为brk分配的内存需要等到高地址内存释放以后才能释放,也就是说,free(buf[1999])没有释放的话,之前的所有释放都没有释放。最终导致程序一直占用125M多内存一直得不到释放。
  15.     printf("%d\n",i);
  16.     }
  17.     sleep(10000);
  18.     return (EXIT_SUCCESS);
  19. }
  20. 怎样能在这种环境情况下及时的释放内存呢?
复制代码

论坛徽章:
11
技术图书徽章
日期:2014-03-01 14:44:34天蝎座
日期:2014-05-21 22:11:59金牛座
日期:2014-05-30 17:06:14
2 [报告]
发表于 2014-04-21 12:21 |只看该作者
回复 1# daxiguagg
如果偶尔申请大块内存,且需要及时释放,考虑mmap;如果内存分配模式简单而频繁,考虑维护一个内存池;其它情况就直接malloc/free,别做太多杞人忧天的事情。

   

论坛徽章:
95
程序设计版块每日发帖之星
日期:2015-09-05 06:20:00程序设计版块每日发帖之星
日期:2015-09-17 06:20:00程序设计版块每日发帖之星
日期:2015-09-18 06:20:002015亚冠之阿尔艾因
日期:2015-09-18 10:35:08月度论坛发贴之星
日期:2015-09-30 22:25:002015亚冠之阿尔沙巴布
日期:2015-10-03 08:57:39程序设计版块每日发帖之星
日期:2015-10-05 06:20:00每日论坛发贴之星
日期:2015-10-05 06:20:002015年亚冠纪念徽章
日期:2015-10-06 10:06:482015亚冠之塔什干棉农
日期:2015-10-19 19:43:35程序设计版块每日发帖之星
日期:2015-10-21 06:20:00每日论坛发贴之星
日期:2015-09-14 06:20:00
3 [报告]
发表于 2014-04-21 16:11 |只看该作者
timespace 发表于 2014-04-21 12:21
别做太多杞人忧天的事情。


过早优化乃99%万恶之源啊。

论坛徽章:
1
15-16赛季CBA联赛之辽宁
日期:2016-07-06 16:53:09
4 [报告]
发表于 2014-04-21 18:06 |只看该作者
只是闲来无事,发现有这个问题存在,想探讨一下看有些什么方法解决而已
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP