虽然这篇文章说它应该有效 https://stackoverflow.com/questions/2338778/what-is-the-maximum-length-of-an-array-in-net-on-64-bit-windows,如果创建一个大小为 Int32.MaxValue 的 int 数组,它会抛出OutOfMemoryException: Array dimensions exceeded supported range.
根据我的测试,数组可以初始化的最大大小似乎是Int32.MaxValue - 1048576
(2,146,435,071)。 1048576 是 2^20。所以只有这个有效:
var maxSizeOfIntArray = Int32.MaxValue - 1048576;
var array = new int[maxSizeOfIntArray];
有谁知道为什么吗?有没有办法创建更大的整数数组?
PS:我需要使用数组而不是列表,因为 Math.Net 库只返回随机数集的数组,这些随机数是加密安全的伪随机数生成器
是的,我已经查看了链接的其他问题,但它们不正确,因为这些问题说最大尺寸是 Int32.MaxValue,这与我的计算机允许我做的不一样
是的,我确实知道数组的大小为 8GB,我需要生成数十亿行的数据集,以便通过更难的测试套件来测试随机性
我还尝试了创建一个选项BigArray<T> https://stackoverflow.com/a/19577371/11104068但 C# 似乎不再支持这一点。我找到了它的一种实现,但即使我将数组大小设置为 300 万,它也会在索引 524287 处抛出 IndexOutOfRangeException。
An Int32
是 32 位,即 4 个字节。的最大值Int32
是 2,147,483,647。因此,如果您可以创建一个包含 2,147,483,647 个元素的数组,其中每个元素为 4 字节,则您将需要一块大小为 8GB 的连续内存。这是非常大的,即使你的机器有 128GB 的 RAM(并且你运行在 64 位进程中),这也超出了实际的比例。如果您确实需要使用那么多内存(并且您的系统有),我建议使用本机代码(即 C++)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)