我猜你是指这个,曾经的“Windows优化大师”的内存整理工具(WoptiMem.exe)。
这个工具的用词不是很严谨,它的“交换区”是指操作系统虚拟的整个内存(物理内存+页面文件)的目前可用空间,而它的“可用虚拟内存”指物理内存+页面文件的目前可用空间。是否注意到了,虚拟内存的935MB可用比物理内存的1452MB可用更小,这是为什么呢。我查询到一些资料:相关数值似乎是采用 GlobalMemoryStatusEx function (Windows) 这个API来获取的,其中说道:
“to determine how much memory your application can allocate without severely impacting other applications.”(以确定你的应用程序能分配多少内存而不严重影响其他应用程序)。
而该API的结构体 MEMORYSTATUSEX structure (Windows) 中又说道:
ullAvailVirtual
The amount of unreserved and uncommitted memory currently in the user-mode portion of the virtual address space of the calling process, in bytes.
(目前在虚拟地址空间的用户模式部分中未保留且未提交的内存空间总额)
所以,这个交换区是去除了系统认为平稳运行所需的内存空间后得出的,也就是系统的部分可交换(Windows叫“可分页”)内存是不纳入在内的,虽然在紧急情况下也可以被分页(写入交换文件)。而这些老式的“内存优化软件”,就是依靠部分(快速)或完全(深度)挤压这些可交换内存,将已有的缓存清空,以图更多的内存留给即将运行的软件或者将增加的内存(如PS打开大文件),而不是等到用时才边交换内存(写入页面文件)边增加内存(读取文件),这会因为HDD的随机读写性能较差,反而让人感觉操作缓慢。拓展阅读:人们常说的“虚拟内存”通常指的是Windows的“页面文件”(pagefile.sys),而准确的“虚拟内存”(Virtual Memory)定义是指操作系统以物理内存、页面文件等虚拟出的整个内存空间。Linux中的类似定义是Swap分区。Win8+的swapfile.sys文件,是为了给Metro应用(Win10为UWP应用)被挂入后台时强制待机所用。系统会在挂起的短暂时间后(几十秒)将应用的内存写入该文件以腾出物理内存,而在重新打开时从该文件读取整个应用的虚拟内存空间而直接打开。因为是连续读取,所以HDD也不会很慢,并且省去了初始化时间、保存了应用状态,类似Win8+的“快速启动”功能(采用原休眠文件 hiberfil.sys,关机时保存整个内核的虚拟地址空间)。