字节[]的最大长度?

问题描述 投票:20回答:4

我正在尝试创建一个长度为byteUInt32.MaxValues数组。这个数组本质上是一个小的(ish)内存数据库:

byte[] countryCodes = new byte[UInt32.MaxValue];

然而,在我的机器上,在运行时,我得到一个System.OverflowException,“算术运算导致溢出”。

这是怎么回事?我需要使用unsafe块和malloc吗?我怎么会在C#中做到这一点?

c# arrays byte unsafe
4个回答
28
投票

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

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

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

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


8
投票

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

1
投票

我不会在第一时间这样做。为什么要为内存数据库设置所有内存?难道你不想要一个随着你一直增加大小的数据结构(例如List<int>)吗?或者(如果愿意)使用像sqlite这样的内存数据库?


1
投票

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

var countryCodes = new byte[2130702268];
© www.soinside.com 2019 - 2024. All rights reserved.