多维浮点数组分配崩溃

时间:2016-08-01 13:38:09

标签: c# .net

我正在尝试分配一个非常大的多维浮点数组,但是当超出某些维度时会遇到内存异常问题。

//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和40亿个元素的数组大小限制,但这些方法都没有限制。另外,我不能使用另一个数据结构,因为我需要将[,]传递给外部API调用。任何人都知道这里可能会发生什么? 谢谢!

2 个答案:

答案 0 :(得分:3)

我对您的代码所经历的是,它在32位模式下编译(和运行)时不起作用。如果我切换到64位构建模式,它确实有效。

所以打开你的项目设置>编译并将Platform目标设置为x64。

答案 1 :(得分:3)

来自Hans Passant

  

45000 x 5000 x 4~ = 900兆字节。你不会在32位进程中得到它,可用地址空间中最大的漏洞在启动时徘徊在大约650兆字节,并且当你的程序运行一段时间后,它会迅速下降。只需删除抖动强制,这样您的程序就可以作为64位进程运行。右键单击您的EXE项目>属性>编译选项卡。在8TB的地址空间中有很多非常大的漏洞。