所以这是我的代码:
static void Main(string[] args)
{
Console.WriteLine("How many numbers are you going to enter?");
long num = long.Parse(Console.ReadLine());
long[] nums = new long[num];
}
当我为" num"输入10000000000时我得到了
" System.OverflowException算术运算导致了 。溢出"
我该怎么做才能解决它?
答案 0 :(得分:9)
您的代码溢出,因为C#中数组的最大大小为Int32.MaxValue
,等于2147483647.您可以在source code中看到相应的提示,并在{{{ 3}}:
默认情况下,Array的最大大小为2千兆字节(GB)。在一个 在64位环境中,您可以通过设置来避免大小限制 在运行时,配置元素的启用属性(在.NET 4.5中引入的
<gcAllowVeryLargeObjects>
)为true 环境。但是,阵列仍将限制为总共4个 十亿个元素,并且在任何给定的最大索引为0X7FEFFFFF(2146435071) 维度(0X7FFFFFC7(2147483591)用于字节数组和单字节数组 结构)。
答案 1 :(得分:4)
好的,你正在尝试分配很多内存,因为调用long数组构造函数实际上已经释放了你请求的内存。 long
是64位,所以是8个字节。 8字节* 10000000000 = 80 GB内存。那太多了。
假设您有足够的内存,C#中数组的最大长度为int.MaxValue
,即2,147,483,647(使用long
为16GB)。