我得到一个“引发ArgumentError:阵列尺寸过大”的消息,下面的代码:数组大小太大 - 红宝石
MAX_NUMBER = 600_000_000
my_array = Array.new(MAX_NUMBER)
问题。什么是Array.new函数在Ruby中的最大值?
我得到一个“引发ArgumentError:阵列尺寸过大”的消息,下面的代码:数组大小太大 - 红宝石
MAX_NUMBER = 600_000_000
my_array = Array.new(MAX_NUMBER)
问题。什么是Array.new函数在Ruby中的最大值?
用500个百万个元素的数组是在大小为2个GiBytes,其 –取决于所使用 –特定OS上通常是最大进程可以解决。换句话说:你的数组比你的地址空间大。因此,解决方案是显而易见的:要么减小数组的大小(通过大块分割),要么增大地址空间(在Linux中,可以修补内核以获得3,3.5,甚至4 GiByte的地址空间,当然也可以切换到64位操作系统和 64位Ruby实现(!)也可以)。
或者,您需要重新考虑您的方法。也许使用mmap
而不是数组,或者类似的东西。也许延迟只加载你需要的部分。
谢谢。是的,工作在一个懒惰的负载算法来解决这个问题。 – 2010-09-13 03:25:52
这是否意味着一个4KB数组将适合2000个整数? – mbigras 2017-02-03 03:39:32
'NoMemoryError:未能分配内存'在这里。你在用什么红宝石? – Reactormonk 2010-09-10 19:01:44
在Textmate上的红宝石1.8.6。 – 2010-09-10 19:09:59
你为什么想让Ruby哭? :)“Array.new(100_000_000)&& false”似乎运行得有些快。 – 2010-09-10 19:21:23