字节[]的最大长度?

GoH*_*ome 20 c# arrays byte unsafe

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

byte[] countryCodes = new byte[UInt32.MaxValue];
Run Code Online (Sandbox Code Playgroud)

但是,在我的机器上,在运行时,我得到一个System.OverflowException"算术运算导致溢出".

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

Luk*_*keH 29

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

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

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

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


Nic*_*ick 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)
    {}
}
Run Code Online (Sandbox Code Playgroud)