代码之家  ›  专栏  ›  技术社区  ›  EMP

为什么我不能在.NET中创建大小大于2GB的对象,即使是在x64上?

  •  1
  • EMP  · 技术社区  · 14 年前

    读后 Are C# Strings (and other .NET API’s) limited to 2GB in size? 我在.NET 3.5中使用大型字符串和数组。我发现我能分配的最大数组是 int.MaxValue - 56 字节。对于弦乐,我能得到的最大的东西是 (int.MaxValue - 58) / 2 字符(因为每个字符占用2个字节)。在那之后它扔 OutOfMemoryException .

    为什么存在这种限制? 并不是说我在实践中遇到过它——我只是好奇.NET的内部工作。

    是的,这是在一个有大量RAM的64位机器上,当然,这个进程是作为64位进程运行的。(实际上,我可以为6GB的总内存使用分配3个这样的数组或字符串。)

    2 回复  |  直到 12 年前
        1
  •  1
  •   David M    14 年前

    设计决定将gc堆上的对象大小限制为2GB,甚至在x64上也是如此。这里有一篇很好的博客,来自参与设计决策的人:

    http://blogs.msdn.com/b/joshwil/archive/2005/08/10/450202.aspx

        2
  •  1
  •   Marc Gravell    12 年前

    在.NET 4.5之前的版本中,最大对象大小为2GB。从4.5开始,如果 gcAllowVeryLargeObjects 启用。注意限制 string 不受影响,但“数组”也应该包含“列表”,因为列表由数组支持。

    推荐文章