为了账号安全,请及时绑定邮箱和手机立即绑定

64位Windows上.NET中数组的最大长度是多少

64位Windows上.NET中数组的最大长度是多少

陪伴而非守候 2019-09-26 15:07:34
64位Windows上.NET中数组的最大长度是多少我听说有人在.NET中最大数组大小是4 GB?只是想知道那是否是真的。您不会梦想在32位.NET上执行此操作,而是在具有12 GB RAM的64位系统上执行此操作,也许,也许您可能想要执行此操作。:-)
查看完整描述

3 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

一个数组在理论上最多可以包含2,147,483,647个元素,因为它使用int进行索引。实际限制略低于此限制,具体取决于数组中包含的类型。

但是,.NET CLR中最大单个对象限制为2GB,即使在64位中也是如此。这是设计使然

您可以轻松地实现一种IList<T>在内部保留多个数组并允许您扩展到超过2GB单个对象限制的实现,但是框架本身没有一个。

但是,通常这不是一个真正的问题。大多数时候,您将拥有指向大型类的数组-因此该数组仅保存引用。这意味着您的阵列可以有效地指向许多GB的内存-但是阵列本身不能大于2GB。


请注意,从.NET 4.5开始,有一个可供64位应用程序加入的新选项:gcAllowVeryLargeObjects。有了这个新的选项集,就可以UInt32.MaxValue在多维数组中获得(4,294,967,295)个元素,尽管一维数组仍限于2,146,435,071个元素(对于单字节数组或不包含任何字节的结构数组,则为2,147,483,591个元素) 。

使用此选项的新规则是:

  • 数组中元素的最大数量为UInt32.MaxValue。

  • 对于字节数组和单字节结构数组,任何单个维度的最大索引为2,147,483,591(0x7FFFFFC7),对于其他类型,最大索引为2,146,435,071(0X7FEFFFFF)。

  • 字符串和其他非数组对象的最大大小不变。


查看完整回答
反对 回复 2019-09-26
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

.NET中任何一个对象的最大大小为2GB。

当然,这对您可以制作原始阵列的大小设置了硬性限制。

您可以创建一个“数组数组”(甚至创建自己的索引器,就好像它是一个连续数组一样),如果您为其定义了自己的类,则可以将其设为任意大小。


查看完整回答
反对 回复 2019-09-26
  • 3 回答
  • 0 关注
  • 717 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信