数组大小太大 - 红宝石

时间:2010-09-10 18:58:41

标签: ruby arrays

我收到一个'ArgumentError:array size too big'消息,其中包含以下代码:

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

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

1 个答案:

答案 0 :(得分:14)

具有5亿个元素的数组大小为2 GiBytes,这取决于您使用的特定操作系统,通常是进程可以解决的最大值。换句话说:您的数组比地址空间大。

所以,解决方案显而易见:要么让数组更小(比方说,将其分解成块),要么使地址空间更大(在Linux中,你可以修补内核以获得3,3.5甚至4 GiByte地址空间,当然切换到64位操作系统 64位Ruby实现(!)也可以。)

或者,您需要重新考虑您的方法。也许使用mmap而不是数组,或类似的东西。也许懒得加载你需要的部分。