我正在尝试创建一个长度为UInt32.MaxValue
的byte
数组。这个数组本质上是一个小的(Ish)内存数据库:
byte[] countryCodes = new byte[UInt32.MaxValue];
然而,在我的机器上,在运行时,我得到了一个带有“算术运算导致溢出”的System.OverflowException
。
怎么回事?我需要使用unsafe
块和malloc
吗?我如何在C#中做到这一点呢?
发布于 2013-08-21 08:31:31
在.NET 4.5上,字节数组的最大可实例化长度是: 2147483591,比int.MaxValue少56。通过以下方式找到:
for (int i = int.MaxValue; i > 0; i--)
{
try
{
byte[] b = new byte[i];
Console.Out.WriteLine("MaxValue: " + i);
Environment.Exit(0);
}
catch (Exception ignored)
{}
}
发布于 2018-12-29 14:29:13
字节数组的最大长度为: 2130702268。例如:
var countryCodes = new byte[2130702268];
发布于 2010-10-16 01:11:30
我一开始就不会这么做。为什么要为这个内存中的数据库预留所有内存呢?难道你不想要一个数据结构,它的大小随着你的发展而递增(例如List<int>
)吗?或者(如果愿意)使用内存中的数据库,如sqlite
https://stackoverflow.com/questions/3944320
复制相似问题