免费注册 查看新帖 |

Chinaunix

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

[内核入门] 请问malloc会分配物理内存吗 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2016-03-02 10:40 |只看该作者 |倒序浏览
请问malloc返回后物理内存分配了吗,是否也是write的时候才分配物理内存?

论坛徽章:
0
2 [报告]
发表于 2016-03-02 12:34 |只看该作者
malloc调用完成虚拟内存的分配,这块内存现在还没有物理页与之对应,等到进程第一次读写这块内存的时候,发生缺页中断,这个时候,内核才分配这块内存对应的物理页。

评分

参与人数 1可用积分 +2 收起 理由
Godbach + 2 赞一个!

查看全部评分

论坛徽章:
11
程序设计版块每日发帖之星
日期:2015-09-09 06:20:00CU十四周年纪念徽章
日期:2016-05-16 11:11:112016科比退役纪念章
日期:2016-05-04 17:16:57程序设计版块每日发帖之星
日期:2016-02-20 06:20:00程序设计版块每周发帖之星
日期:2015-11-06 19:30:58程序设计版块每日发帖之星
日期:2015-09-12 06:20:00程序设计版块每日发帖之星
日期:2015-09-11 06:20:00每日论坛发贴之星
日期:2015-09-10 06:20:00程序设计版块每日发帖之星
日期:2015-09-10 06:20:00每日论坛发贴之星
日期:2015-09-09 06:20:0015-16赛季CBA联赛之四川
日期:2016-12-15 15:52:10
3 [报告]
发表于 2016-04-12 09:17 |只看该作者
回复 2# 收到


   说的不能再好了

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2016-04-12 15:37 |只看该作者
回复 1# allkillers

LZ 也可以写一个测试程序,不停的 malloc,然后看看系统内存有么有减少。calloc 也可以试试。哦,你最后再测试一下加上 memset 的效果。




   

论坛徽章:
0
5 [报告]
发表于 2016-04-13 15:24 |只看该作者
回复 4# Godbach

写了个测试程序发现,malloc之后就分配地址了,用top看空闲内存会减少,已用内存增加。 加入memset之后,和不用memset没区别,我的系统是centos。

   

论坛徽章:
0
6 [报告]
发表于 2016-04-13 19:35 |只看该作者
主要要确定下,top命令是查看虚存分配使用情况,还是反映真实物理内存的。man top下看看。回复 5# zhonzn


    javascript:void(0)

论坛徽章:
0
7 [报告]
发表于 2016-04-13 21:19 |只看该作者
本帖最后由 zhonzn 于 2016-04-13 21:28 编辑
allkillers 发表于 2016-04-13 19:35
主要要确定下,top命令是查看虚存分配使用情况,还是反映真实物理内存的。man top下看看。回复 5# zhonzn
...


你开帖讨论的就是物理内存,我这里回复的自然就是物理内存的,你有不明白的,动手写个10来行的小测试程序不就知道了? 你别告诉我不知道top能看物理内存的使用情况。

你还可以用free命令看看, 继续man free吧。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
8 [报告]
发表于 2016-04-13 22:44 |只看该作者
回复 5# zhonzn

实际上 malloc 之后,系统的内存不一定减少的。

而 memset 是肯定会导致减少的。你尝试分配一些大块内存试试吧,还有 calloc。




   

论坛徽章:
0
9 [报告]
发表于 2016-04-14 15:51 |只看该作者
本帖最后由 zhonzn 于 2016-04-14 15:57 编辑
Godbach 发表于 2016-04-13 22:44
回复 5# zhonzn

实际上 malloc 之后,系统的内存不一定减少的。


我定义一个2000个元素的指针数组,给它们都分配2048字节,先运行top,再运行程序后, 明显看到 free 数量减少,use 数量增加,程序退出后,内存就恢复,
在程序中加入menset之后 ,编译运行,内存减少的量跟没加入memset是一样的。
top和free看到的结果都一样。
可能是因为我申请的内存太小了,大的内研究过。。如果申请1G那就不知道了,没玩过,呵呵。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP