字节[]的最大长度?

时间:2010-10-15 16:45:40

标签: c# arrays byte unsafe

我正在尝试创建长度为byte的{​​{1}}数组。这个数组本质上是一个小的(ish)内存数据库:

UInt32.MaxValue

然而,在我的机器上,在运行时,我得到byte[] countryCodes = new byte[UInt32.MaxValue]; “算术运算导致溢出”。

这笔交易是什么?我是否需要使用System.OverflowException块和unsafe?我怎么能在C#中做到这一点?

4 个答案:

答案 0 :(得分:28)

System.Array的当前实现对其所有内部计数器等使用Int32,因此理论上最大元素数为Int32.MaxValue

Microsoft CLR还强加了2GB的每个对象最大大小限制。

这里有一个很好的讨论和解决方法......

这里有一些相关的,不完全重复的问题和答案......

答案 1 :(得分:8)

On .NET 4.5字节数组的最大可实例化长度为:2147483591,或者比int.MaxValue少56。通过以下方式找到:

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)
    {}
}

答案 2 :(得分:1)

我首先不会这样做。为什么要为内存数据库设置所有内存?您是否更愿意想要一个随着时间的推移而增加大小的数据结构(例如List<int>)?或者(如果愿意)使用内容数据库,如sqlite

答案 3 :(得分:1)

字节数组的最大长度为:2130702268。 例如:

var countryCodes = new byte[2130702268];