回覆列表
  • 1 # 使用者2358116597475

    虛擬記憶體不是交換檔案的一種機制。它是保留物理記憶體的一個機制,允許應用程式看起來能夠用比物理記憶體+交換檔案更大的記憶體地址空間。比如一個C++程式向CRT請求分配一個100K大的記憶體,CRT會向作業系統保留1兆(VirtualAlloc+MEM_RESERVE),這100k就是被確認了的記憶體(MEM_COMMIT),這樣下次應用再請求100K,CRT就是直接在已經保留的這1兆記憶體裡直接再確認出100K來。這個在需要連續的記憶體地址的時候很有用。比如一個稀疏矩陣,保留的記憶體可以上G,但是確認的記憶體可以只有幾K。

    一個Windows系統中能夠確認的記憶體的上限是物理記憶體+交換檔案大小,因為已經確認的記憶體是在這些物理儲存裡面儲存的。已確認的記憶體和上限太接近就會出現題目中的警告。因為有很多程式釋出之前並沒有經過很好的壓力測試,在記憶體確認失敗的時候可能有資料丟失等故障出現。

    確認過的記憶體只有在被訪問之前才會分配物理儲存。如果一個應用程式確認了記憶體之後從來沒有用過這塊記憶體(這時候作者其實應該用MEM_RESERVE而不是MEM_COMMIT),那麼系統的可用記憶體並不會減少。這也造成在可用記憶體還有很多的時候可能就會有記憶體確認失敗(相當於倉庫裡有貨但是貨都有主了所以顯示售罄)。至於是哪些程序確認了記憶體卻不用,你可以在任務管理器的詳細資料裡面去看。

    出現這個問題,說明應該增加交換檔案大小了。

    順便說一下,關閉記憶體交換檔案通常是降低效能不是提升。畢竟你不能指望第三方軟體在記憶體使用的效率上普遍超過微軟的程式設計師。開啟交換檔案可以把那些記憶體使用效率較低的程式的記憶體佔用踢到交換檔案裡面去(比如開了很大的緩衝區又沒有用),把物理記憶體給那些記憶體使用效率較高的程式用。

  • 中秋節和大豐收的關聯?
  • 吉他自學者切音時聲音不脆,應該如何練習?