数组大小太大-ruby

数组大小太大-ruby,ruby,arrays,Ruby,Arrays,我收到一条带有以下代码的“ArgumentError:数组大小太大”消息: MAX_NUMBER = 600_000_000 my_array = Array.new(MAX_NUMBER) 问题。Array.new函数在Ruby中的最大值是多少 一个包含5亿个元素的数组的大小为2千兆字节,这取决于您使用的特定操作系统,通常是进程可以寻址的最大值。换句话说:数组比地址空间大 因此,解决方案是显而易见的:要么使数组变小(比如说,将其分成若干块),要么使地址空间变大(在Linux中,您可以修补内核

我收到一条带有以下代码的“ArgumentError:数组大小太大”消息:

MAX_NUMBER = 600_000_000
my_array = Array.new(MAX_NUMBER)

问题。Array.new函数在Ruby中的最大值是多少

一个包含5亿个元素的数组的大小为2千兆字节,这取决于您使用的特定操作系统,通常是进程可以寻址的最大值。换句话说:数组比地址空间大

因此,解决方案是显而易见的:要么使数组变小(比如说,将其分成若干块),要么使地址空间变大(在Linux中,您可以修补内核以获得3、3.5甚至4千兆字节的地址空间,当然,切换到64位操作系统和64位Ruby实现(!)也可以)


或者,您需要重新考虑您的方法。可能使用
mmap
而不是数组或类似的东西。可能延迟加载只加载您需要的部分。

NoMemoryError:无法在此处分配内存。你在用什么ruby?为什么你想让ruby哭“Array.new(100_0000; u 000)和&false”似乎运行得有点快:-)是的,当我将MAX_NUMBER设置为500_0000; 000时,它对我来说运行得很好-不过花了五分钟完成。然而,这并没有解决我正在处理的主要问题。我想我也得重新考虑我的解决方案。谢谢。是的,正在研究一种延迟加载算法来解决这个问题。这是否意味着一个4KB的数组可以容纳2000个整数?