免费注册 查看新帖 |

Chinaunix

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

[C] malloc生存周期 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-04-13 15:36 来自手机 |只看该作者 |倒序浏览
都说malloc生存周期是到free结束。但是我一直有个疑问,内存相关的操作,不都会经过虚拟内存吗,一个进程对应一个4g的虚拟内存抽象,也就是说,一个进程在执行结束退出时,其对应的虚拟内存也会消失,那么linux会不会自动清理未被free的malloc数据?如果是,那么严格意义上来说,malloc的生存周期就不仅仅是到free了,free只是一种良好的编程习惯(暂时不讨论那种一直运行一直malloc并且从不free直到内存用光的程序)

论坛徽章:
36
CU大牛徽章
日期:2013-09-18 15:24:20NBA常规赛纪念章
日期:2015-05-04 22:32:03牛市纪念徽章
日期:2015-07-24 12:48:5515-16赛季CBA联赛之辽宁
日期:2016-03-30 09:26:4715-16赛季CBA联赛之北控
日期:2016-03-30 11:26:2315-16赛季CBA联赛之广夏
日期:2016-05-20 15:46:5715-16赛季CBA联赛之吉林
日期:2016-05-24 11:38:0615-16赛季CBA联赛之青岛
日期:2016-05-30 13:41:3215-16赛季CBA联赛之同曦
日期:2016-06-23 16:41:052015年亚洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年纪念徽章
日期:2013-10-24 15:46:53
2 [报告]
发表于 2014-04-13 19:57 |只看该作者
free只是一种良好的编程习惯(暂时不讨论那种一直运行一直malloc并且从不free直到内存用光的程序)

论坛徽章:
36
CU大牛徽章
日期:2013-09-18 15:24:20NBA常规赛纪念章
日期:2015-05-04 22:32:03牛市纪念徽章
日期:2015-07-24 12:48:5515-16赛季CBA联赛之辽宁
日期:2016-03-30 09:26:4715-16赛季CBA联赛之北控
日期:2016-03-30 11:26:2315-16赛季CBA联赛之广夏
日期:2016-05-20 15:46:5715-16赛季CBA联赛之吉林
日期:2016-05-24 11:38:0615-16赛季CBA联赛之青岛
日期:2016-05-30 13:41:3215-16赛季CBA联赛之同曦
日期:2016-06-23 16:41:052015年亚洲杯之巴林
日期:2015-02-03 15:05:04CU大牛徽章
日期:2013-09-18 15:24:52CU十二周年纪念徽章
日期:2013-10-24 15:46:53
3 [报告]
发表于 2014-04-13 20:03 |只看该作者
free只是一种良好的编程习惯(暂时不讨论那种一直运行一直malloc并且从不free直到内存用光的程序)
那你是要讨论哪种程序,那种运行几秒就结束了的程序?

论坛徽章:
1
双子座
日期:2013-11-06 17:18:01
4 [报告]
发表于 2014-04-13 20:28 |只看该作者
free只是C库提供的API吧,和系统应该没关系.个人觉得,理论上free后,你还是可以继续使用原先的地址.而且不会产生段错误.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2014-04-13 21:21 |只看该作者
回复 3# idi0t


    是的

论坛徽章:
1
巨蟹座
日期:2014-03-18 23:44:30
6 [报告]
发表于 2014-04-14 19:50 |只看该作者
是的,free 是用来保证在进程长期不退出的服务进程内存泄漏。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
7 [报告]
发表于 2014-04-15 22:58 |只看该作者
自己回答吧。
linux c有垃圾回收机制,一个从根节点出发的有向图。但是什么时机触发这个垃圾回收机制,我查到的是 当内存不够用时  会清除这些无用的被开辟的内存。。。
具体查看《深入理解计算机系统》虚拟内存那章。

论坛徽章:
0
8 [报告]
发表于 2014-04-16 09:07 |只看该作者
你确定在谈的是ANSI C?还是在谈操作系统的机制,混淆了语言机制~回复 7# mrpre


   

论坛徽章:
59
2015年亚洲杯之约旦
日期:2015-01-27 21:27:392015年亚洲杯之日本
日期:2015-02-06 22:09:41拜羊年徽章
日期:2015-03-03 16:15:432015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:50:282015元宵节徽章
日期:2015-03-06 15:50:392015年亚洲杯之阿联酋
日期:2015-03-19 17:39:302015年亚洲杯之中国
日期:2015-03-23 18:52:23巳蛇
日期:2014-12-14 22:44:03双子座
日期:2014-12-10 21:39:16处女座
日期:2014-12-02 08:03:17天蝎座
日期:2014-07-21 19:08:47
9 [报告]
发表于 2014-04-16 12:25 |只看该作者
楼主自娱自乐噬~
1. 程序结束时, 该进程所有的虚拟内存空间被释放, 依存在虚拟内存上的物理内存自然也被即时释放。
2. 相反,free可能并不会立即释放内存给内核, 因为它是c运行库函数, 什么时候真正释放内存给内核, 要看它的具体实现。
3. malloc和free (事实上是分配内存的内核调用,如brk), 在真正的意义上, 都只是alloc和free虚内存, 它们只对虚存有意义。
    alloc系统调用得到的地址空间, 一般要等到缺页异常时才会得到物理内存的分配, 相反, free地址空间, 则未缺页的物理内存将马上被释放,因为缓存它们似乎没有什么价值。

论坛徽章:
0
10 [报告]
发表于 2014-04-16 17:38 |只看该作者
程序退出了,内存资源当然被回收了,关free一点事没用
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP