2011-04-26 52 views
7

對於我在C#中的編程練習,我試圖創建長度爲 的數組,長度爲0x1fffffff(base10中的536,870,911),但是我得到了System.OutOfMEmoryException。大陣列C#OutOfMemoryException

對於構建,我定位了x64系統,並且我在Windows7 x64上運行了帶有8GB內存的VisualStudio2008。 它應該是足夠的內存陣列(它在JDK x64和CPP項目上工作)

有什麼想法?

 const long MAX = 0x1fffffff; // 536870911 in base10 
     program.arr = new long[MAX]; 
     for (long i = 0; i < MAX; i++) 
     { 
      program.arr[i] = i;     
     } 
+0

僅供參考,它被稱爲「C#」,而不是「CSharp」。 – 2011-04-26 14:34:39

+5

你不能製作一個很大的物體。但即使你能做到,你似乎也會因爲RAM決定你可以分配多少內存的錯誤理解而受苦。它沒有,也沒有幾十年。內存容量限制了*快*你將能夠訪問該內存。擁有大內存是性能優化;內存分配實際上最好是從頁面文件中分配出來的。記住,當你分配內存時,你正在分配*虛擬內存*,而不是*硬件內存*。 – 2011-04-26 15:42:48

回答

25

CLR不支持任何大小大於2GB的單個對象。你要求一個4,294,967,288字節的數組 - 超過兩倍的支持。

您可以使用那麼多的內存,但不能在單個對象(如數組)中使用。

5

很難推薦任何有意義的替代品,因爲你沒有說明你想要達到什麼,只是你不能做什麼。

這就是說,如果你確實需要一些快速連續的視圖到一個大於2GB的平面地址空間,你可以使用MemoryMappedFile

,如果你表示什麼意味着在這個疙瘩的內存,所以地址空間本身必須是想這將有助於連續的(你傳遞一個指針,它例如非託管代碼),爲什麼它需要平面尋址。

0

並使陣列的一個子集,然後填充該陣列

yourary []

masterarray [] < ------填充youraray []高達緩衝器的2GB然後將其添加在masterarray