據我所知,一個32位進程只能在沒有/ 3GB開關的32位Windows上訪問2GB內存,並且由於其自身惡魔般的原因,某些內存被操作系統佔用。這似乎與我的經驗結合在一起,因爲我們有一個應用程序在達到1.2 - 1.5 GB的RAM時會崩潰,但內存不足異常,即使仍有大量內存可用。32位進程可以在64位Windows操作系統上訪問更多內存嗎?
我的問題是,將這個32位應用程序移動到64位Windows允許它訪問超過1.5GB左右的內存,現在它可以?或者應用程序本身必須升級到64位?
據我所知,一個32位進程只能在沒有/ 3GB開關的32位Windows上訪問2GB內存,並且由於其自身惡魔般的原因,某些內存被操作系統佔用。這似乎與我的經驗結合在一起,因爲我們有一個應用程序在達到1.2 - 1.5 GB的RAM時會崩潰,但內存不足異常,即使仍有大量內存可用。32位進程可以在64位Windows操作系統上訪問更多內存嗎?
我的問題是,將這個32位應用程序移動到64位Windows允許它訪問超過1.5GB左右的內存,現在它可以?或者應用程序本身必須升級到64位?
較新版本的Visual Studio有一個新標誌,它使32位應用程序「瞭解大地址空間」。基本上它所做的就是說,如果它裝載在64位版本的Windows上,那麼它將獲得4GB(32位指針的限制)。這當然比你在32位版本的Windows上獲得的2或3 GB更好。見http://msdn.microsoft.com/en-us/library/aa366778.aspx:
最值得注意的是它說:內存和地址空間
限值的平臺,操作系統, 和是否LOADED_IMAGE結構的 IMAGE_FILE_LARGE_ADDRESS_AWARE價值 和 4 GB的變化調優(4GT)正在使用中。 IMAGE_FILE_LARGE_ADDRESS_AWARE設置爲 或使用 /LARGEADDRESSAWARE鏈接器選項清除。
您的應用將受到指針大小的限制,在您的示例32位中。
如果您的應用程序要訪問更多內存,那麼您需要某種分段內存架構,就像我們在16位日期中應用程序使用16位指針和偏移量訪問完整32位內存空間一樣。
WOW64允許使用在64位Windows 32位Windows應用程序,翻譯32位指針到真實64位指針。實際上,32位尋址應該允許訪問4GB的內存。
32位代碼正在運行時,沒有將32位指針轉換爲64位。 WOW64只在涉及64位代碼轉換時涉及到。 – 2012-11-08 00:48:28
是的,在正確的情況下,Windows上的32位進程可以訪問完整的4GB內存,而不是通常所限制的2Gb。
對於這個工作,你需要以下條件:
您的意思是,它可以訪問32位指針提示的完整4 Gb嗎?如果沒有一些工作,它肯定無法解決超過4Gb的問題,但我有興趣知道它是否可以使用比在32位Windows下更多的功能。 – erickson 2009-02-20 17:54:41