免费注册 查看新帖 |

Chinaunix

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

[内核入门] 关于虚拟内存的疑问 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-13 11:19 |只看该作者 |倒序浏览
可能很傻的问题,请大家指点一下。

我的理解是,在程序运行过程中,只有当用到相应的数据,比如引用或是赋值某个数组元素时,才发生缺页中断调页,数组元素才真正在物理内存上分配空间。

如果这个理解是对的,我的问题是,没放在物理内存中的数据,放在何处呢?

比如,我开了一个1G的数组,并将所有元素设为1,程序运行时发现驻留集大小远没有1G。可是这"1G个1"的信息总要1G的空间到存放吧?如果没放在物理内存中,那是放在什么地方呢? (我的系统上没有swap)

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
2 [报告]
发表于 2012-05-13 11:42 |只看该作者
回复 1# morfast
我的理解是,在程序运行过程中,只有当用到相应的数据,比如引用或是赋值某个数组元素时,才发生缺页中断调页,数组元素才真正在物理内存上分配空间。

如果这个理解是对的,我的问题是,没放在物理内存中的数据,放在何处呢?

如果在应用程序中申请空间,但是还没有使用,那么可能只有虚拟地址,但是没有真正的物理地址对应。因为你还没有使用呢,所以那里也没有。只在逻辑上存在。

如果是磁盘文件的map,那么虚拟地址存在,但是对应的物理地址可能还没有对应。这时候数据还在磁盘上存储,等真正访问的时候,才把磁盘文件读取到物理内存中。
   

论坛徽章:
0
3 [报告]
发表于 2012-05-13 11:56 |只看该作者
本帖最后由 morfast 于 2012-05-13 11:56 编辑

回复 2# 瀚海书香


    谢谢版主。:wink:

    你说的这两点我明白。但我不解的是,假如是在应用程序中申请空间,比如,申请了1G,然后把这1G设置为1。那么,这“1G数据都是1"这一信息,总共需要1G的空间来存放的吧?如果不是放在物理内存中,(即用ps或top看到的RES大小远没有1G),是放在何处呢?

   磁盘文件的map好理解,就存放在硬盘上的文件上,需要调页时才发生IO操作读取。但应用程序中申请空间的情况我就想不明白了。

论坛徽章:
1
拜羊年徽章
日期:2015-03-03 16:15:43
4 [报告]
发表于 2012-05-13 13:26 |只看该作者
回复 1# morfast
你要弄明白你想静态分配还是动态分配。
如果你是静态分配,你的数组的内存编译时就分配好,放在initialized data section里
如果你想动态分配,程序运行时,先申请1G数组,再给赋值;申请内存时,你只拿到线性地址,还没有分配物理空间,只有当你赋值是才分配物理空间。

   

论坛徽章:
6
金牛座
日期:2013-10-08 10:19:10技术图书徽章
日期:2013-10-14 16:24:09CU十二周年纪念徽章
日期:2013-10-24 15:41:34狮子座
日期:2013-11-24 19:26:19未羊
日期:2014-01-23 15:50:002015年亚洲杯之阿联酋
日期:2015-05-09 14:36:15
5 [报告]
发表于 2012-05-13 14:40 |只看该作者
回复 3# morfast
比如,申请了1G,然后把这1G设置为1。那么,这“1G数据都是1"这一信息,总共需要1G的空间来存放的吧?如果不是放在物理内存中,(即用ps或top看到的RES大小远没有1G),是放在何处呢?

操作系统会尽力满足你的请求,如果实在没有空间了,就会分配swap。
我这边测试了一下,如果申请1G的空间,并赋值,那么进程的RSS会非常大,大约800M左右,不足的空间在swap分区中,如下图的a.out进程

   

论坛徽章:
0
6 [报告]
发表于 2012-05-13 17:12 |只看该作者
回复 5# 瀚海书香


    非常感谢!

    我刚刚也试了一下,的确如此。我的机器上没设置swap,RSS就等于数组的大小了。
    之前我也这么试过,可能是读错了ps的输出吧,所以误会了。现在明白了

   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP