解惑之所谓的最大2GB可用虚存空间
咱们先来一个陈述:虚拟内存和虚拟地址空间不是一回事儿。
可能有些人容易将这两个概念弄混,今天来说说。
虚拟地址空间描述了地址是如何被解析,每一个进程都有它自己独立的虚拟地址空间。一个进程使用了多少虚存空间不会对影响其他进程。
假设,我们有一个应用程序进程分配了1GB的虚存空间。然后我们运行这个应用程序的3个实例,这个歌时候,我们将总共分配3GB的虚存空间。
用户模式的虚拟地址空间通常为2GB,但是它并限制你使用2GB虚拟内存。你可以在未映射到虚存空间的情况下分配足够大的内存。(那些使用过扩展内存或其他形式的内存交换的人非常熟悉这种技术。)
下面这个API创建了一个文件映射:

如果你拥有足够的物理内存,或者交换空间足够大,则一个多达4GB的内存分配操作也能成功。
当然了,对于一台32位的系统,你不能将所有的虚拟内存都一次性的映射到物理内存中。但是,我们可以通过分成一个一个的片段来间接实现,下面的代码演示了如何从内存中读取一个字节。

当然,在一个真实的程序中,你会进行错误检查,可能还有一个缓存层,以避免花费你所有的时间来映射和取消映射。
关键点在于,虚拟地址空间并不是虚拟内存。如我们之前所看到的,你可以将同样的内存映射到多个地址空间中,所以已经违反了虚拟内存和虚拟地址空间之间的一对一映射。在上面的例子中我们得到这样一个结论,即:仅仅分配了内存,并不意味着它必须占用进程虚拟地址空间中的任何空间。
总结
64位的年代,妈妈再也不用担心我的虚存不够用了。
旺旺赞!
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《Myth: Without /3GB a single program can’t allocate more than 2GB of virtual memory》
最近我写了个东西
正如你们所知道的,拓扑梅尔智慧办公平台(Topomel Box)是一款绿色软件,主要面向经常使用电脑的朋友。它提供了各种提升办公效率的小功能,同时操作上尽可能地简单方便。
我想:你值得拥有。
- 下一篇: 只有当物理内存超过2GB时才需要/3GB
- 上一篇: /3GB开关对内核空间的影响
相关推荐
- 第 378 期:微软通过扩展模式让安卓应用在 Windows 11 上的运行更加原生化
- Posted on 12月12日
- 第 767 期:微软确认 Windows 11 更新导致回收站删除时显示了错误的提示信息
- Posted on 06月20日
- VS2022:结构化诊断
- Posted on 10月17日
- 第 735 期:微软承认 Windows 11 的右键菜单会导致误点击
- Posted on 06月07日



评论已关闭。