你有没有在电脑上看过「内存不足」的提示 然后想 我明明有8G内存怎么开几个网页就满了
答案是 你电脑里真实的内存条可能真的只有8G 但你的操作系统让它看起来像有几十个G 这个魔术叫作 虚拟内存
内存为什么会不够
我们先想一个问题 如果一台电脑同时开着浏览器 游戏 音乐播放器和Word 那每个程序都需要一块内存来放它们自己的代码和数据 假设浏览器要2G 游戏要4G 音乐要128M Word要512M 加起来已经远远超过8G了 那操作系统怎么撑下来的
答案很简单 它做了三件事
第一件 时间换空间
大多数程序不会同时用到它们申请的所有内存 你打开Word 它可能一次性跟系统要了512M空间 但如果你只是打开了一个空白文档 它实际上只用了十几M来存光标位置和默认字体 剩下的空间只是占着位 操作系统发现了这个规律 所以它允许每个程序申请远超过物理内存的空间 反正你暂时用不上
第二件 硬盘变内存
当物理内存真的不够用了 操作系统会把暂时用不到的数据搬到硬盘上 硬盘虽然慢 但空间大 这个技术叫「交换」 就像你桌上堆满了书 坐不下了 就把暂时不看的书塞回书柜 要看了再拿出来
硬盘比内存慢几百倍 但操作系统很聪明 它会把那些大概率不会马上用到的数据优先搬走 而不是随便挑一个
第三件 给每个程序造一个幻象
这才是虚拟内存的精髓 操作系统给每个正在运行的程序画了一个超大的假地图 这个地图上每个地址 都看起来像是一块真实的内存地址 但实际上 它们只是编号 不指向真正的内存
当程序说「我要访问地址X」 操作系统会偷偷查一个小本本 它的真实地址在哪 可能在物理内存里 也可能在硬盘上 如果恰好在硬盘上 系统会先把这块数据从硬盘搬到内存 再把这个地址映射过去
整个过程程序完全不知道 它只觉得自己拥有一整片连续的巨大空间 从来没有被打断过
为什么我们管它叫「虚拟」
因为你看得到 但摸不到 就像你在游戏里有一个巨大的背包 但实际上所有东西都存在远程服务器上 只有你打开背包的那一瞬间才会去下载
虚拟内存的本质就是一次欺骗 让每个程序都以为自己是这栋楼里唯一的住户 拥有整栋楼的所有房间 而操作系统是那个楼管 它偷偷把不常用的房间锁起来 把东西存到地下仓库 等你想进去的时候再帮你搬回来
所以很多时候你看到的已用内存 不是真的被占满了 更像是你的程序说你给我留个位置我以后用 而操作系统说好的我先记着 然后转头就把这个位置借给别人用了
这就是为什么你打开十个网页还能正常用电脑 不是你的内存条在变魔术 是操作系统在替你在背后偷偷调房间
但人多了还是会卡 因为硬盘搬数据的速度 真的不如内存快 如果物理内存不够 操作系统就不得不频繁地从硬盘搬进搬出 这时候电脑就会变得非常卡 因为你在等硬盘
下次电脑卡的时候可以看一眼任务管理器 如果硬盘一直在疯狂读写 那八成就是虚拟内存在加班了