为什么以下代码抛出异常“算术运算导致溢出。”?
UInt64[] arr=new UInt64[UInt64.MaxValue];
答案 0 :(得分:7)
我猜是因为要求分配完全8 * UInt64.MaxValue
个字节,这个乘法显然会溢出64位寄存器。
答案 1 :(得分:7)
因为索引器只接受Int32值。你可以做到
UInt64[] arr=new UInt64[Int32.MaxValue];
但这就是限制。
编辑:从技术上讲,你可以使用理论上高于Int32.MaxValue的值结构索引数组(因为你可以使用long或uint索引数组),但是,当你运行时会遇到运行时错误该值超过Int32.MaxValue。
答案 2 :(得分:2)
由于
a)所有对象在.NET中限制为2GB b)你没有64个PetaBytes的内存花费
答案 3 :(得分:0)
根据Microsoft的文档,对于.NET 4.5框架,这些限制适用: