繁体   English   中英

为什么“ UInt64 [] arr = new UInt64 [UInt64.MaxValue];”会引发异常?

[英]why does “UInt64[] arr=new UInt64[UInt64.MaxValue];” throw exception?

为什么下面的代码引发异常“算术运算导致溢出”。

UInt64[] arr=new UInt64[UInt64.MaxValue];

我猜是因为请求总共分配8 * UInt64.MaxValue字节,并且这种乘法显然溢出了64位寄存器。

因为索引器仅采用Int32值。 你可以做

UInt64[] arr=new UInt64[Int32.MaxValue];

但这就是极限。

编辑:从技术上讲,您可以使用理论上比Int32.MaxValue高的值结构来索引数组(例如,因为您可以使用long或uint索引数组),但是,当值超过时,您将遇到该运行时错误Int32.MaxValue。

因为

a).NET中所有对象都限于2GB
b)您没有64 PetaBytes的内存可用于

根据Microsoft的文档,对于.NET 4.5框架,这些限制适用:

  • 数组中元素的最大数量为UInt32.MaxValue。
  • 对于字节数组和单字节结构数组,任何单个维度的最大索引为2,147,483,591(0x7FFFFFC7),对于其他类型,最大索引为2,146,435,071(0X7FEFFFFF)。
  • 字符串和其他非数组对象的最大大小不变

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM