Site Tools


Windows記憶體限制

發表於: 2008- 9-26 - M. Fugier
訂正: 2008-10-28
摘要:一個應用程式需要用到多少記憶體?

當談到應用程式的性能,就會提到用到多少記憶體的問題。 答案往往是4GB記憶體的限制。 Windows 4GB記憶體的限制意味著一個32位元Windows系統上的應用程式,最多只能在系統上使用到4GB的記憶體。 但這個數據是哪裡來的?

定義上來說,一個32位元的處理器使用32位元來標示每個位元組的位置。2^32 = 42億。 這表示一個32位元的記憶體位置只能連結到42億個獨特的位置,而這42億等於4GB。

在32位元Windows環境中,每個應用程式都有自己的虛擬4GB記憶體空間。 系統記憶體管理器追蹤記憶體映像、分頁檔等。

這4GB的空間平均分為兩部分:

  • 2GB用於內核或供作業系統使用。
  • 剩餘2GB由應用程式使用。

每個應用程式都能分配到自己的2GB,但所有程式必須共同分享相同的2GB內核空間。

32位元XP、64位元XP以及32位元Vista作業系統中有3GB boot.ini開關,可以修改調整應用程式記憶體空間以及內核記憶空間的分區。 這個開關給每個應用程式3GB的記憶體,就只剩下1GB給內核。對於多數電腦來說這不是一個問題。 然而有些類似終端伺服器的環境並不適合這樣的配置。更多資訊請見 McNeel Wiki 頁面

現今,選擇買一台64位元結構的電腦將記憶體上限增加至2^64個位址,大約等於172億的gigabytes、1680萬terabytes或是 16 千兆exabytes的記憶體空間。

一個64位元的系統理論上可以尋址到最大16 exabytes的RAM(隨機存取記憶體),那是大約16,000,000 GB 的RAM。換句話說 2^64位址的上限大概比 2^32 或32位元結構的系統大上百億倍。

現實中就算有,也很少有64位元系統支援15exabytes的RAM,沒有一個Windows版本能夠支援。要建構一個能夠支援那麼大量記憶體的機器,對於電腦硬體預算來說是不可能的。電腦製造商對於RAM位址空間設計的限制大概落於8G到256TB之間。

理論上,64位元作業系統上運作的64位元應用程式會指定8TB給虛擬記憶,供使用者處理使用,另外8TB為內核處理,虛擬記憶總共為16TB。

目前並不是所有Microsoft 64位元作業系統都以16TB的限制。 相反的他們對於位址空間有實際的限制,並且允許不超過128GB實體記憶的存取。 非商業或是家庭版有更多的限制。

  • Vista Home Basic限制為8GB。
  • Home Vista Home Premium 限制為16GB。
  • Vista Business、Enterprise以及Ultimate允許使用整個128G。

如果今天你買一個64位元的電腦,裡面是64位元作業系統如XPx64或是Vistax64。 許多Windows應用程式還沒被更新為64位元的模式。在64位元電腦上執行32位元應用程式,速度往往比他們在原生模式類比執行還要慢。這是因為還要將32位元代碼轉換為64位元格式。

然而用於擴展XP、XP64位元以及Vista32位元上執行32位元應用程式2GB限制的3GB開關,對於Vista x64並不是必需的。 Vista x64允許32位元應用程式存取3GB,而且無須設定配置。

Rhino 4不是64位元版,但Rhino 5是。 所以您可以在Rhino 5生命週期中看到第一個原生64位元Rhino應用程式。

Rhino/Flamingo: Windows 處理虛擬內存限制2GB。

Windows Vista、2000、XP (32位元版)有相當於4GB虛擬記憶的32位元虛擬位址空間。 其中2GB可以提供給像Rhino這樣的城市。 另外2GB則是分配給Windows的執行。

這表示能夠分派給Rhino(或Rhino 與Flamingo)的最大記憶空間為2GB。

如果Rhino (或Rhino 與Flamingo)在記憶體不足的訊息下停止執行,您可以藉由觀察Rhino記憶體分配查看:

  1. 在Windows工作列的空白區域按右鍵,選取工作管理員,並執行工作管理員(taskmgr.exe)。
  2. 在視圖下拉清單選取選定列(SelectColumns),再選取虛擬記憶體大小的選項,再按OK
  3. 一個標為虛擬記憶體大小 (VM Size)的一列就會出現在進程選項標籤上。
  4. 啟動Rhino並開啟讓記憶體不足的工作檔案。
  5. 在進程選項標籤,選取Rhino3.exe或Rhino4.exe。觀察虛擬大小的使用程度,當到達1,800,000 K (1.8GB)時您就知道剩下能夠讓Rhino使用的記憶體不多了。

請參考其他關於降低Rhino (或Rhino與Flamingo)記憶體需求的文章與資訊。

更多關於Windows虛擬記憶體:

http://www.microsoft.com/technet/prodtechnol/winntas/training/ntarchitectoview/ntarc_7.mspx


關於Windows虛擬記憶體的解釋 - 交換檔、分頁檔、處理空間等等:

http://members.shaw.ca/bsanders/WindowsGeneralWeb/RAMVirtualMemoryPageFileEtc.htm


zh-tw/rhino/memorylimits.txt · Last modified: 2020/08/14 (external edit)