2012-07-02 46 views
0

我有一個x64應用程序。這是一個有點沉重的應用程序(在線程數,內存需求等方面)。我在4GB RAM 64位Windows7四核心機器上運行此應用程序。但我注意到,在我的應用程序需要大約2.2-2.3 GB的RAM之後,它纔會崩潰。這是否需要行爲?最大64bit應用程序最大隻能從4GB RAM獲取2.3-2.4 GB RAM?x64進程可以佔用多少內存4GB RAM

回答

1

不,請檢查您是否沒有任何溢出或其他錯誤。即使是32位應用程序也可以解決這個問題 - 使用更多的RAM,所以如果它在Windows 64位上受到限制,那將是荒謬的。

剩餘的內存是免費使用的,對吧?

+1

在Windows上,32位進程實際上可以直接尋址2GB的內存(除非設置了IFLAA位) - 請參閱[MSDN上的內存限制](http://msdn.microsoft.com/zh-cn/庫/ aa366778%28VS.85%29.aspx) – Fiktik

0

調試你的程序。不應該因爲您分配大量內存而導致崩潰。通常的嫌疑犯:數學溢出,內存損壞,未能處理來自內存分配例程的錯誤。

+0

如果沒有捕獲到所產生的異常,那麼分配失敗肯定會導致程序崩潰(這通常是這種情況,因爲這種情況下,你無法從in無論如何很多情況下,所以最多隻能緩存一下,顯示一些關於崩潰的信息(可能很難分配內存),然後退出)。 – Grizzly

1

RAM的數量是沒有關係的,一個進程分配虛擬內存。您可以在64位進程中分配的虛擬內存量僅受操作系統提供頁面以將虛擬內存映射到RAM的能力的限制。如果您沒有使用CreateFileMapping()創建您自己的映射,那麼通常僅受最大允許的頁面文件限制。這是一個系統設置,控制面板+系統+高級。 Windows版本有一個上限,Windows 7家庭高級版有16 GB,專業版以上爲192 GB。

RAM僅在您的程序實際訪問虛擬內存時使用。當內存尚未映射時,會產生頁面錯誤。如果您在使用所有可用頁面之前分配和使用內存的次數遠遠超過RAM的數量,則64位進程通常會由於這些頁面錯誤而變慢。

由於你在典型的最大分頁文件大小的南部,這肯定是另一個普通的舊堆損壞錯誤。

相關問題