【问题标题】:Maximum length of byte[]?字节[]的最大长度?
【发布时间】:2011-04-26 01:14:00
【问题描述】:

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

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

然而,在我的机器上,在运行时,我收到了一个 System.OverflowException,其中包含“算术运算导致溢出”。

有什么关系?我需要使用unsafe 块和malloc 吗?我将如何在 C# 中做到这一点?

【问题讨论】:

  • 我不知道有这么多国家!

标签: c# arrays byte unsafe


【解决方案1】:

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

Microsoft CLR 还规定了每个对象最大大小为 2GB 的限制。

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      var countryCodes = new byte[2130702268];
      

      【讨论】:

        【解决方案4】:

        我一开始不会这样做。为什么要为这个内存数据库留出所有内存?您不想要一个随着您的进行而大​​小增加的数据结构(例如List<int>)吗?或者(如果愿意)使用像sqlite 这样的内存数据库?

        【讨论】:

          猜你喜欢
          • 2023-03-31
          • 1970-01-01
          • 1970-01-01
          • 2016-04-15
          • 2010-11-05
          • 2011-09-03
          • 2012-05-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多