免费注册 查看新帖 |

Chinaunix

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

[C] malloc后完全不使用该内存的情况 [复制链接]

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2018-03-21 18:28 |只看该作者 |倒序浏览
Linux下

情况1
某程序 malloc() 出1G内存,完全不使用(读写)

情况2
其它和情况1相同,只是没有这个malloc()

情况1 和 情况2 程序、操作系统的行为会有哪些不同吗,不同场景会有一些特殊区别吗?

完全不使用的话,OS也不会分配真实的物理内存吧。
我能想到的就是 情况1 多了一点点管理开销来记录这1G,不过貌似也没啥实际影响。

大家有啥看法?

论坛徽章:
145
技术图书徽章
日期:2013-10-01 15:32:13戌狗
日期:2013-10-25 13:31:35金牛座
日期:2013-11-04 16:22:07子鼠
日期:2013-11-18 18:48:57白羊座
日期:2013-11-29 10:09:11狮子座
日期:2013-12-12 09:57:42白羊座
日期:2013-12-24 16:24:46辰龙
日期:2014-01-08 15:26:12技术图书徽章
日期:2014-01-17 13:24:40巳蛇
日期:2014-02-18 14:32:59未羊
日期:2014-02-20 14:12:13白羊座
日期:2014-02-26 12:06:59
2 [报告]
发表于 2018-03-21 21:44 |只看该作者
malloc() failed ?

论坛徽章:
0
3 [报告]
发表于 2018-03-21 22:44 |只看该作者
老实说我没明白楼主想问什么啊?

论坛徽章:
1
15-16赛季CBA联赛之新疆
日期:2017-03-09 12:33:45
4 [报告]
发表于 2018-03-22 09:06 |只看该作者
本帖最后由 jeppeter 于 2018-03-22 09:09 编辑

回复 1# hitcser01

如果完全不用的话,那这个其实内核只是对这个进程进行了记账,没有真的直接给钱。这个开销其实很小,小到大概实际支出只有十几K而已,
你肯定要问,什么时候兑现,这个就是在你读或者写到内存的时候,而且是要用到多少才真的给,如你只用到20M的内存,那其实真的分配的物理内存也就比这个多一点(这当然是虚拟内存有管理的开销)。这种模式在计算机领域很常见。如so加载,进程启动等等。
具体的内容,你要看讲虚拟内存的书籍。

论坛徽章:
14
水瓶座
日期:2014-06-10 09:51:0215-16赛季CBA联赛之江苏
日期:2017-11-27 11:42:3515-16赛季CBA联赛之八一
日期:2017-04-12 14:26:2815-16赛季CBA联赛之吉林
日期:2016-08-20 10:43:1215-16赛季CBA联赛之广夏
日期:2016-06-23 09:53:58程序设计版块每日发帖之星
日期:2016-02-11 06:20:00程序设计版块每日发帖之星
日期:2016-02-09 06:20:0015-16赛季CBA联赛之上海
日期:2015-12-25 16:40:3515-16赛季CBA联赛之广夏
日期:2015-12-22 09:39:36程序设计版块每日发帖之星
日期:2015-08-24 06:20:002015亚冠之德黑兰石油
日期:2015-08-07 09:57:302015年辞旧岁徽章
日期:2015-03-03 16:54:15
5 [报告]
发表于 2018-03-22 09:27 |只看该作者
malloc是用户态的操作,内核不知道的,内核只提供了brk这种系统调用给你

malloc只分配虚拟内存,只有到你用的时候才会有物理内存给出来

论坛徽章:
3
处女座
日期:2015-03-18 14:35:45羊年新春福章
日期:2015-03-18 14:48:23午马
日期:2015-03-18 14:51:09
6 [报告]
发表于 2018-03-22 10:45 |只看该作者
are you sb?

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
7 [报告]
发表于 2018-03-22 19:06 |只看该作者
回复 3# t0mychen

好吧,看来我没说清楚。
假设已存在一个程序,跑得好好的。我加一行代码 malloc() N个G,假设malloc()成功,但以后完全不使用这块内存。这个行为引发哪些后果?我理解如果完全不使用,那么几乎没任何影响?

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
8 [报告]
发表于 2018-03-22 19:08 |只看该作者
回复 4# jeppeter

嗯,您说的大概了解一点。要实际使用遇到缺页时操作系统才会分配真实的物理内存页,映射到进程里去。所以您的看法也是:完全不使用malloc()出的内存,和没有调用过该 malloc() 几乎是一样的效果?

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
9 [报告]
发表于 2018-03-22 19:11 |只看该作者
回复 6# mr_sev

你tm是傻逼啊。

以前遇到你们这群动不动就喷的人,我都忽略的。现在想通了,为啥不骂一顿呢?

论坛徽章:
2
嗜杀者
日期:2015-11-25 10:44:3015-16赛季CBA联赛之北京
日期:2016-03-20 19:50:17
10 [报告]
发表于 2018-03-22 19:14 |只看该作者
回复 6# mr_sev

你是sb,我不是
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP