發表於: 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內核空間。
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實體記憶的存取。 非商業或是家庭版有更多的限制。
如果今天你買一個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記憶體分配查看:
請參考其他關於降低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