字节的最大长度?

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

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

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

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

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

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

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

  • BigArray ,绕过2GB数组大小限制

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

  • 是否存在可以存储在List中的元素的限制?
  • .Net中的非常大的集合会导致内存不足exception
  • c#中数据的最大限制是多少?

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

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