2016-08-01 73 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的地址空间中有很多非常大的漏洞。