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

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

我听说有人在.NET中最大数组大小是4 GB?只是想知道那是否是真的。您不会梦想在32位.NET上执行此操作,而是在具有12 GB RAM的64位系统上执行此操作,也许,也许您可能想要执行此操作。:-)



陪伴而非守候
浏览 729回答 3
3回答

犯罪嫌疑人X

一个数组在理论上最多可以包含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)。字符串和其他非数组对象的最大大小不变。

qq_笑_17

.NET中任何一个对象的最大大小为2GB。当然,这对您可以制作原始阵列的大小设置了硬性限制。您可以创建一个“数组数组”(甚至创建自己的索引器,就好像它是一个连续数组一样),如果您为其定义了自己的类,则可以将其设为任意大小。
打开App,查看更多内容
随时随地看视频慕课网APP