[英]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框架,这些限制适用:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.