C# 字节[]的最大长度?

C# 字节[]的最大长度?,c#,arrays,byte,unsafe,C#,Arrays,Byte,Unsafe,我正在尝试创建一个长度为UInt32.MaxValue的bytes数组。该阵列本质上是一个小型(ish)内存数据库: byte[] countryCodes = new byte[UInt32.MaxValue]; 然而,在我的机器上,在运行时,我得到一个带有“算术运算导致溢出”的System.OverflowException 怎么回事?我是否需要使用不安全的块和malloc?在C#?系统的当前实现中,数组对其所有内部计数器等使用Int32,因此理论上的最大元素数是Int32.MaxValu

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

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


怎么回事?我是否需要使用
不安全的
块和
malloc
?在C#?

系统的当前实现中,数组对其所有内部计数器等使用
Int32
,因此理论上的最大元素数是
Int32.MaxValue

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

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

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


    • 我一开始不会这么做。为什么要为这个内存数据库保留所有内存?您是否更希望数据结构的大小随您的操作而增加(例如,
      列表
      )?或者(如果愿意)使用.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)
          {}
      }
      

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

      var countryCodes = new byte[2130702268];
      

      我不知道有这么多国家!