我猜你是指這個,曾經的“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最佳化大師”的記憶體整理工具(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,關機時儲存整個核心的虛擬地址空間)。