首页
社区
课程
招聘
[求助]虚拟内存也占用空间吗???
发表于: 2016-10-31 20:41 3697

[求助]虚拟内存也占用空间吗???

2016-10-31 20:41
3697

这个图上表示的虚拟内存,这个虚拟内存页也占用空间吗???

比如malloc调用完成虚拟内存的分配,malloc返回得到一个虚拟内存地址,不明白这个虚拟内存,究竟这个虚拟内存在没映射物理页,也没有倒换成页面文件的时候,“这个虚拟内存”究竟占不占用空间,还是说他只是一个地址的表达而已???

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
2
你可以这么理解,每个32位进程的虚拟地址空间都是从0x00000000 ~ 0xFFFFFFFF共4G。
一般高2G属于内核领空,这里不考虑。

剩下的空间按照4KB分一个页。如果进程的某个页被使用或者说被映射。那么这个页就有对应的物理内存页。
否则就没有,那么这个页的虚拟地址空间就是无效的。

malloc分配成功的内存页肯定是有效的。所以肯定占用物理内存页,但是该内存页如果长时间未使用,就可能被系统置换到虚拟内存页面文件中去,然后对应的物理内存页就空闲出来,可以分配给别的进程使用。

如果该进程再次访问这个虚拟地址空间,系统就会发现对应的页在页面文件。然后再置换回来。

简而言之,只要虚拟内存页是有效的(图中未标记未映射的),就占用空间。
2016-10-31 22:02
0
游客
登录 | 注册 方可回帖
返回
//