解惑之所谓的最大2GB可用虚拟地址空间
咱们先来一个陈述:虚拟内存和虚拟地址空间不是一回事儿 。 可能有些人容易将这两个概念弄混 , 今天来说说 。 虚拟地址空间描述了地址是如何被解析 , 每一个进程都有它自己独立的虚拟地址空间 。 一个进程使用了多少虚存空间不会对影响其他进程 。
假设 , 我们有一个应用程序进程分配了1GB的虚存空间 。 然后我们运行这个应用程序的3个实例 , 这个时候 , 我们将总共分配3GB的虚存空间 。
用户模式的虚拟地址空间通常为2GB , 但是它并限制你使用2GB虚拟内存 。 你可以在未映射到虚存空间的情况下分配足够大的内存 。 (那些使用过扩展内存或其他形式的内存交换的人非常熟悉这种技术 。 )
下面这个API创建了一个文件映射:
文章图片
如果你拥有足够的物理内存 , 或者交换空间足够大 , 则一个多达4GB的内存分配操作也能成功 。
当然了 , 对于一台32位的系统 , 你不能将所有的虚拟内存都一次性地映射到物理内存中 。 但是 , 我们可以通过分成一个一个的片段来间接实现 , 下面的代码演示了如何从内存中读取一个字节 。
文章图片
当然 , 在一个真实的程序中 , 你会进行错误检查 , 可能还有一个缓存层 , 以避免花费你所有的时间来映射和取消映射 。
关键点在于 , 虚拟地址空间并不是虚拟内存 。 如我们之前所看到的 , 你可以将同样的内存映射到多个地址空间中 , 所以已经违反了虚拟内存和虚拟地址空间之间的一对一映射 。 在上面的例子中我们得到这样一个结论 , 即:仅仅分配了内存 , 并不意味着它必须占用进程虚拟地址空间中的任何空间 。
总结
64位的年代 , 妈妈再也不用担心我的虚拟内存不够用了 。
旺旺赞!
最后
RaymondChen的《TheOldNewThing》是我非常喜欢的博客之一 , 里面有很多关于Windows的小知识 , 对于广大Windows平台开发者来说 , 确实十分有帮助 。
本文来自:《Myth:Without/3GBasingleprogramcan’tallocatemorethan2GBofvirtualmemory》
最近我写了个东西
正如你们所知道的 , 拓扑梅尔智慧办公平台(TopomelBox)是一款绿色软件 , 主要面向经常使用电脑的朋友 。 它提供了各种提升办公效率的小功能 , 同时操作上尽可能地简单方便 。
【解惑之所谓的最大2GB可用虚拟地址空间】我想:你值得拥有 。
文章图片
- 苹果|苹果最巅峰产品就是8,之后的产品,多少都有出现问题
- 京东正式上线“年礼无忧”服务
- 小米 11 Ultra 内测 NFC“读写勿扰”与“解锁后使用”功能
- 他是“中国氢弹之父”,他的名字曾绝密28年,他叫于敏
- 智能|地震救人新突破!中科院研制出触嗅一体智能仿生机械手
- 物联网|据说,物联网也可以称之为“一张想想的网络”,物联网世界是梦
- CPU|电脑硬件选购技巧之CPU散热,性价比干货,土豪回避
- 单反|帮你留住精彩瞬间!年终奖到手之后,喜欢单反相机的必买这款?
- CPU|性价比不二之选!i5-12400网游测试:已看见锐龙7 5800X尾灯
- 一加科技|相比于所谓的“游戏手机”,一加10Pro,还有更加专业的影像系统