在Windows上打开QQ, 会为他分配多大虚拟空间?
查阅相关资料,了解一个进程最大虚拟内存在32位Windows上为2G,64位为8T。
那么用户开启一个QQ或者浏览器在64位Windows上,就直接分配8T虚拟空间吗?
如果是,为什么要分这么大?那么他的映射表(虚拟空间和物理空间)上该怎么写?因为我们的物理内存基本是4-16G,并且新打开进程仍然要分配这么大吗?
如果不是,那是由什么决定的,如果不够了怎么办?
多谢~
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
是的,分配2G/8T。
注意,分配的是虚拟地址空间,不是虚拟空间;
为什么分配这么大?这是windows给出的承诺,向应用程序承诺,在物理内存足够大的情况下,我能够提供给你这么大的地址空间(注意这里的用词是地址空间,意思是有允许其内存寻址最多到8T这个数字)
当然,虚拟内存空间地址是一回事,实际空间是另一回事。
之前说了,虚拟空间地址只是承诺能够寻址,并非真的分配了空间;当应用程序真的申请了地址空间内能访问的内存时,windows才会开始把被访问的内存页映射到物理内存中。(没错,人家就是打了个空头支票,实际情况是你用一页我分配一页)
所以总结如下:
所谓的8T(0x200000000)有什么用:允许应用程序访问0x0-0x200000000的任意地址,当然访问0x200000001就会报错,因为超出地址空间了(所以虚拟地址空间越大越好,这样编译器布局内存自由度更大)
64位系统为例,物理内存16G,应用程序用了10G,会发生什么:也就是说我允许应用程序用8T内存,但他只用了10G,那没问题,因为可以映射到16G物理内存中;
64位系统为例,物理内存16G,应用程序用了17G,会发生什么:唔,物理内存有点不够用,但是可以把一些内存页存到硬盘上(虚拟内存),所以问题也不大,但是进程切换可能引起内存页在硬盘上的读写,所以电脑会有点卡
64位系统为例,物理内存16G,应用程序申请了8T,会发生什么:没错,应用程序的确被允许使用8T内存,但是此时系统提供不了这么多,空头支票暴露,你的系统奔溃了