2016-08-01 52 views
3

我試圖分配一個非常大的多維浮點數組,但是當超出某些維度時,會發生內存異常問題。多維浮法陣列分配崩潰

//Doesn't crash 
float[,] newArr = new float[40000, 5000]; 

//Crashes 
float[,] newArr1 = new float[45000, 5000]; 

//Doesn't crash 
float[,] newArr2 = new float[40000000, 5]; 

//Crashes 
float[,] newArr3 = new float[45000000, 5]; 

我不知道是什麼問題,我所知道的2GB的數組大小限制和4個十億元素,但這些都不能任意限制。另外,我不能使用另一個數據結構,因爲我需要將[,]傳遞給外部API調用。任何人都知道這裏可能會發生什麼? 謝謝!

+0

它發生在我的32位應用程序@ .NET 4.5.1,Windows 7,8 GB RAM上。 – DDushaj

+6

45000 x 5000 x 4〜= 900兆字節。你不會在32位的過程中獲得這個功能,可用地址空間中的最大漏洞在啓動時徘徊在約650兆字節,並且在程序運行一段時間後會迅速下降。只需刪除抖動強制,以便您的程序可以作爲64位進程運行。右鍵單擊您的EXE項目>屬性>編譯選項卡。在8 TB的地址空間中有很多非常大的漏洞。 –

+0

@HansPassant會喜歡把這個標記爲答案,如果你不介意把它放在一個:) – DDushaj

回答

3

我的代碼經驗是,它在32位模式下編譯(和運行)時不起作用。如果我切換到64位構建模式,它可以工作。

因此打開您的項目設置>編譯並將平臺目標設置爲x64。

3

Hans Passant

45000 X 5000×4〜= 900兆字節。你不會在32位的過程中獲得這個功能,可用地址空間中的最大漏洞在啓動時徘徊在約650兆字節,並且在程序運行一段時間後會迅速下降。只需刪除抖動強制,以便您的程序可以作爲64位進程運行。右鍵單擊您的EXE項目>屬性>編譯選項卡。在8 TB的地址空間中有很多非常大的漏洞。