我试图创建一个长度为UInt32.MaxValue
的byte
的数组。该阵列基本上是一个小的(ISH)的内存数据库:字节[]的最大长度?
byte[] countryCodes = new byte[UInt32.MaxValue];
在我的机器,但是,在运行时,我得到一个System.OverflowException
“算术运算导致溢出”。
这是怎么回事?我是否需要使用unsafe
区块和malloc
?我将如何在C#中做到这一点?
我试图创建一个长度为UInt32.MaxValue
的byte
的数组。该阵列基本上是一个小的(ISH)的内存数据库:字节[]的最大长度?
byte[] countryCodes = new byte[UInt32.MaxValue];
在我的机器,但是,在运行时,我得到一个System.OverflowException
“算术运算导致溢出”。
这是怎么回事?我是否需要使用unsafe
区块和malloc
?我将如何在C#中做到这一点?
System.Array
的当前实现对其所有内部计数器等使用Int32
,所以元素的理论最大数量为Int32.MaxValue
。
还有一个由Microsoft CLR施加的每个对象最大2GB的限制。
很好的讨论和解决办法在这里...
和一些相关,不-相当重复的,问题和答案在这里...
我不会这样做的第一个地方。为什么你想为这个内存数据库设置所有内存?难道你不想要一个数据结构的大小随着你的增长而增加(例如List<int>
)?或者(如果喜欢)使用内存数据库,如sqlite?
.NET 4.5一个字节数组的最大可实例化长度为:2147483591,或56小于int.MaxValue。发现通过:
for (int i = int.MaxValue; i > 0; i--)
{
try
{
byte[] b = new byte[i];
Console.Out.WriteLine("MaxValue: " + i);
Environment.Exit(0);
}
catch (Exception ignored)
{}
}
我不知道有这么多的国家! – James 2015-06-10 21:47:45