windows記憶體足夠的情況下為什麼應用程式需要虛擬記憶體?

時間 2021-05-11 20:18:51

1樓:

首先window上的虛擬記憶體=分頁檔案總大小+物理記憶體

已提交的後一項指的是總的虛擬記憶體,前一項指的是已經分配的虛擬記憶體,所以根據你當時的情況提示你記憶體不夠。

關於以提交記憶體的解釋(Honghui Ding):

1. 物理記憶體,也就是我們常常見到的記憶體條

2. 分頁記憶體(磁碟上的 pagefile),在Linux下面叫做swap,這個是乙個特定的檔案或者裝置,當物理記憶體不夠的時候就會把記憶體儲存(交換)到硬碟上

3. 位址空間,物理記憶體的大小加上虛擬記憶體的大小就是位址空間

4. 提交的記憶體(commited memory),這是程式向windows請求的記憶體,一旦程式請求分配,windows就從位址空間裡面分配一段位址。但是注意,實際上這裡只分配了位址,沒有真正分配記憶體。

所有的提交的記憶體大小總和不允許超過位址空間。實際上使用的記憶體往往遠遠小於提交的記憶體。

某些程式往往會預先向windows請求大量的記憶體,但是實際上又不使用,最終導致提交的記憶體很大,超過位址空間,導致其他程式請求記憶體失敗。而這個時候記憶體還是大量的空著的。這就是本文問題的所在。

2樓:無缺草

本來虛擬記憶體就是記憶體不夠用時的後備,記憶體足夠完全可以不用。以前看過一些早期的評測,不設定虛擬記憶體也能執行。

但少數程式,會探測虛擬記憶體是否可用,沒有虛擬記憶體檔案就報錯。並可能在記憶體有剩餘的情況下中止執行。

虛擬記憶體可以比喻為馬路邊的保護帶,再旁邊是懸崖。當堵車時,有保護帶就能低速繞行通過,沒有保護帶的話就塞死或直接下懸崖了。所以預設都有虛擬記憶體,即使你一直行駛在柏油線內。

為了避免程式車禍,程式開發者在沒有虛擬記憶體時就會終止程式了。

記憶體較大,建議設乙個較小的虛擬記憶體即可。想象一下柏油外面就是懸崖的感受,有了一道路肩上路也放心一點兒。

還有一些類似PS的軟體,可以設定最大可用的物理記憶體(比如預設為60%),超過就會強制放到虛擬記憶體。

3樓:Vandy

我的物理記憶體16G。

如果我不禁用虛擬記憶體,那麼系統會自動給分配大概是物理記憶體大小的虛擬記憶體,也就是占用16G硬碟空間。

所以我禁用了。

經過一段時間的日常使用,沒感覺到有任何問題。

也遇到過一次 「記憶體不足」 的提示,結果發現是explorer在搜尋檔案的時候占用過多記憶體,大概有12G,而且還在不斷增長,恐怖吧?

停止了這次搜尋,記憶體就降下來了。

如果不是這次的記憶體提示問題,我大概會一直搜尋下去,也許虛擬記憶體會全部用上也不夠?

綜上所述,我認為禁用了更好。記憶體不足的問題不可怕,更可怕的是記憶體無限。大不了,你需要時候再開啟。

4樓:蔣晟

虛擬記憶體不是交換檔案的一種機制。它是保留物理記憶體的乙個機制,允許應用程式看起來能夠用比物理記憶體+交換檔案更大的記憶體位址空間。比如乙個C++程式向CRT請求分配乙個100K大的記憶體,CRT會向作業系統保留1兆(VirtualAlloc+MEM_RESERVE),這100k就是被確認了的記憶體(MEM_COMMIT),這樣下次應用再請求100K,CRT就是直接在已經保留的這1兆記憶體裡直接再確認出100K來。

這個在需要連續的記憶體位址的時候很有用。比如乙個稀疏矩陣,保留的記憶體可以上G,但是確認的記憶體可以只有幾K。

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

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

至於是哪些程序確認了記憶體卻不用,你可以在任務管理器的詳細資料裡面去看。

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

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

5樓:

結論:當關閉虛擬記憶體時,剩餘給新程式可使用的記憶體數=「可用」記憶體+「備用」記憶體可釋放的部分。

問題中的情況分析如下:

當關閉虛擬記憶體時,所有資料都在RAM上。

只有「可用」記憶體是所有可用的,不包含任何有價值的資料。

「備用」記憶體是程式的快取,當「可用」記憶體用完後,可以進行釋放,但只能釋放一部分。

6樓:stilwell

因為windows程序間共享資料是用記憶體對映檔案實現的,包括RPC、COM、OLE、DDE、DDE、WINDOWS訊息、剪貼簿、套接字等最底層的機制就是記憶體對映檔案。

所以要是不用業交換檔案來實現程序間通訊難道用臨時磁碟檔案實現嗎

7樓:王林小兒

題主你還沒有搞清楚頁面檔案(交換空間)與虛擬記憶體的正確含義,我想你是想表達,為什麼大記憶體還要設定頁面檔案?

事實上,大記憶體根本無需設定頁面檔案,尤其是大於8G的情況下,頁面檔案是以前記憶體小的乙個不得已的解決方案,用硬碟的一塊空間來當作記憶體使用。

作業系統把處於不活躍的程序所占用的記憶體頁儲存到硬碟上,留出更多的記憶體給活躍的程序使用,這樣做的後果就是,由於硬碟速度很慢,尤其是機械硬碟,使得當這些不活躍的程式啟用的時候,作業系統需要大量讀寫硬碟,造成系統響應速度嚴重下降!

如今記憶體容量已不再是瓶頸,題主應該仔細看看是哪些用不上的程序占用了寶貴的系統資源,及時清理後台資源,把有限的資源用在正在使用的程式上才是硬道理。

頁面檔案可以一時用來救急,如果你一直需要開啟頁面檔案,那麼就應當考慮增加物理記憶體,並在物理記憶體足夠的情況下關閉頁面檔案,否則你的靈感將會消失在系統的卡頓和等待中!

8樓:叛逆者

你記憶體是8G的,剩餘3.4G,如果程式要求個4G,那不就不夠了嘛。另一種情況是32位程式,要的記憶體不能超過3G。

即便總的記憶體夠也不行。還有一種情況是記憶體碎片太多,以至於分配不出一整塊的需要大小的記憶體。還有一種情況是程式bug。

你在執行質量效應仙女座,那要求的最低配置就是8G。

記憶體足夠大(8G或16G)情況下使用核芯顯示卡(比如Intel GMA HD 5200)效能能否媲美2G獨顯(比如GTX 765M)

馮宇辰 5200 受單 雙通道和記憶體頻率影響,4 2和4 3沒有太大區別,且核心差距在那 5200只有650m的跑分,遊戲效能充其量實測就640,OPENGL支援太差,765m 670mx 670m 660m 650m 西西弗樸 藍天的w740su搭載了hd5200,實測遊戲只有gt740M水平 ...

同樣使用SSD的情況下,Windows和OS X,哪個表現更好?

卜霞森 黑蘋果路過自己滾過來了 i7 4790k 4.4G 8執行緒 記憶體8G 2400頻率x2 固態256 機械2T 顯示卡gtx960 2g 雙系統win8.1和osx10.10.3 整體感覺 就是不用考慮這個配置能不能帶動 會不會流暢 一路絲滑 兩個系統裡面都有vm 兩邊都試過開4g記憶體的...

PC為什麼在某些情況下特指Windows系統?

乙個各行各業 我也覺得蘋果官方就出過經典廣告 Hi I m a Mac,and I m a pc 說明官方也認為mac不屬於pc 必應國際版上有地道的答案,mac確實屬於pc,但人們把windows電腦叫做pc叫習慣了,不想改了。哈哈就這,和我們把硬碟當成記憶體是乙個道理吧哈哈哈。 紅tea少年2 ...