2009-02-20 24 views
8

據我所知,一個32位進程只能在沒有/ 3GB開關的32位Windows上訪問2GB內存,並且由於其自身惡魔般的原因,某些內存被操作系統佔用。這似乎與我的經驗結合在一起,因爲我們有一個應用程序在達到1.2 - 1.5 GB的RAM時會崩潰,但內存不足異常,即使仍有大量內存可用。32位進程可以在64位Windows操作系統上訪問更多內存嗎?

我的問題是,將這個32位應用程序移動到64位Windows允許它訪問超過1.5GB左右的內存,現在它可以?或者應用程序本身必須升級到64位?

+0

您的意思是,它可以訪問32位指針提示的完整4 Gb嗎?如果沒有一些工作,它肯定無法解決超過4Gb的問題,但我有興趣知道它是否可以使用比在32位Windows下更多的功能。 – erickson 2009-02-20 17:54:41

回答

12

較新版本的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鏈接器選項清除。

另見:http://msdn.microsoft.com/en-us/library/wz223b1z.aspx

1

您的應用將受到指針大小的限制,在您的示例32位中。

如果您的應用程序要訪問更多內存,那麼您需要某種分段內存架構,就像我們在16位日期中應用程序使用16位指針和偏移量訪問完整32位內存空間一樣。

1

WOW64允許使用在64位Windows 32位Windows應用程序,翻譯32位指針到真實64位指針。實際上,32位尋址應該允許訪問4GB的內存。

+0

32位代碼正在運行時,沒有將32位指針轉換爲64位。 WOW64只在涉及64位代碼轉換時涉及到。 – 2012-11-08 00:48:28

4

是的,在正確的情況下,Windows上的32位進程可以訪問完整的4GB內存,而不是通常所限制的2Gb。

對於這個工作,你需要以下條件:

  • 應用程序必須在64位操作系統
  • 該應用程序必須與/ LARGEADDRESSAWARE標誌編譯運行。
  • 應該測試應用程序以確保它在這種情況下實際上正常工作。 ;)(具體來說,依賴指向2GB邊界以下地址的所有指針的代碼在這裏顯然不起作用)
相關問題