2017-08-22 78 views
0

我有代碼是32位,我也認爲編譯器。但是當我編譯我的C++代碼時,它佔用了2GB以上的內存。根據我對32位系統的理解,任何進程都不會超過2 GB。
任何建議如何實現這一目標?我發現很多帖子,但這些
沒有幫助,因爲他們正在添加掉期。但我已經有8 GB的內存。所以我的問題是沒有可用的內存,其編譯過程的大小不能超過2 GB。虛擬內存耗盡:無法分配內存8 gb ram

即使我有8 GB的RAM我試圖添加交換,這也不起作用。

+0

每個進程可用的虛擬地址空間只有2個演出。其他2個giigs保留供操作系統使用,因爲它認爲合適。如果你是谷歌的話,有一種方法可以在Windows中進行3次演出。不要緊,你的計算機有多少內存或交換。更好的是,只需安裝一個64位操作系統,不用擔心它了。 – xaxxon

+0

什麼是「編譯過程的大小」?你的問題實際上是什麼?建議實現什麼?您是否問如何提高程序的空間效率,而不粘貼任何代碼?還是你問如何從32位切換到64位? *根據我對32位系統的理解,任何進程都不能超過2 GB * - 是的,這種理解(或多或少)是正確的,除非您想強制程序的用戶使用'/ 3TB'啓動他們的窗口參數。 – Groo

+0

拋棄你的32位操作系統和編譯器。 –

回答

2

在Windows 32位上,RAM的最大數量是4 GB。默認情況下,這個地址空間被分成內核內存和進程內存,都是2GB大。大多數程序不需要超過2 GB的內存,但如果這樣做,則可以通過指定/ 3GB開關來放大進程內存,從而爲內核留下更少的內存。

這裏閱讀更多信息:https://msdn.microsoft.com/en-us/library/windows/hardware/ff556232(v=vs.85).aspx

編輯:請記住,如果你想利用這些額外的內存,你還需要使用/ LARGEADDRESSAWARE開關編譯程序。這將在程序的進程環境塊中設置一個標誌,使Windows意識到您的程序可能需要超過2 GB的內存。

0

既然你說你有8GB的RAM,我假設你的操作系統和CPU實際上是64位。因此,您正在問如何在64位操作系統上(即在WOW64下運行)使32位程序訪問超過2GB的虛擬地址空間。

在這種情況下,在Visual Studio中使用/LARGEADDRESSAWARE linker option將爲您的應用程序4GB虛擬地址空間under WOW64。除非您強制用戶使用特定標誌引導其操作系統,否則在32位Windows中不會看到任何好處。

我相信你的應用程序並不需要超過2GB的內存,但是如果不知道任何細節就不可能分辨出來。

在任何情況下,一個正確的答案是:切換到64位應用程序,這將獲得8TB的虛擬地址空間。那是8TB