解惑之所谓的最大2GB可用虚拟地址空间
咱们先来一个陈述:虚拟内存和虚拟地址空间不是一回事儿 。 可能有些人容易将这两个概念弄混 , 今天来说说 。 虚拟地址空间描述了地址是如何被解析 , 每一个进程都有它自己独立的虚拟地址空间 。 一个进程使用了多少虚存空间不会对影响其他进程 。
假设 , 我们有一个应用程序进程分配了1GB的虚存空间 。 然后我们运行这个应用程序的3个实例 , 这个时候 , 我们将总共分配3GB的虚存空间 。
用户模式的虚拟地址空间通常为2GB , 但是它并限制你使用2GB虚拟内存 。 你可以在未映射到虚存空间的情况下分配足够大的内存 。 (那些使用过扩展内存或其他形式的内存交换的人非常熟悉这种技术 。 )
下面这个API创建了一个文件映射:
文章图片
如果你拥有足够的物理内存 , 或者交换空间足够大 , 则一个多达4GB的内存分配操作也能成功 。
当然了 , 对于一台32位的系统 , 你不能将所有的虚拟内存都一次性地映射到物理内存中 。 但是 , 我们可以通过分成一个一个的片段来间接实现 , 下面的代码演示了如何从内存中读取一个字节 。 
文章图片
当然 , 在一个真实的程序中 , 你会进行错误检查 , 可能还有一个缓存层 , 以避免花费你所有的时间来映射和取消映射 。
关键点在于 , 虚拟地址空间并不是虚拟内存 。 如我们之前所看到的 , 你可以将同样的内存映射到多个地址空间中 , 所以已经违反了虚拟内存和虚拟地址空间之间的一对一映射 。 在上面的例子中我们得到这样一个结论 , 即:仅仅分配了内存 , 并不意味着它必须占用进程虚拟地址空间中的任何空间 。
总结
64位的年代 , 妈妈再也不用担心我的虚拟内存不够用了 。
旺旺赞!
最后
RaymondChen的《TheOldNewThing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Myth:Without/3GBasingleprogramcan’tallocatemorethan2GBofvirtualmemory》
最近我写了个东西
正如你们所知道的 , 拓扑梅尔智慧办公平台(TopomelBox)是一款绿色软件 , 主要面向经常使用电脑的朋友 。 它提供了各种提升办公效率的小功能 , 同时操作上尽可能地简单方便 。
【解惑之所谓的最大2GB可用虚拟地址空间】我想:你值得拥有 。 
文章图片
- 炸锅|酷暑之下,莫让这些谣言再增“热”度
- 安全测试之渗透测试
- Flyme|“国产系统之光”Flyme迎来十周年,纪念海报上线引发热议
- 新发现恐龙可能在灾难性的太空岩石撞击地球之前就已经灭绝了
- 为何人类所到之处,地球会“寸草不生”?这符合进化论的原理吗?
- 联发科天玑9000+之王浮出水面,极有可能又是vivo
- 水洞中发现玛雅人残骸,可能并没有消失,或揭开玛雅消失之谜!
- 马云|马云自己\打脸\之前所说的,如今现身西班牙,开12亿游艇!
- 中兴|使用中兴Axon40UItra之后,明白屏幕完美,却在市场上遇冷的原因
- 联发科天玑9000+之王预定!蓝厂系新旗舰曝光
