我用以下代码遇到了“ArgumentError: array size too big”的错误信息:
问题. Ruby中Array.new函数的最大值是多少?
MAX_NUMBER = 600_000_000
my_array = Array.new(MAX_NUMBER)
问题. Ruby中Array.new函数的最大值是多少?
MAX_NUMBER = 600_000_000
my_array = Array.new(MAX_NUMBER)
一个包含 5 亿个元素的数组大小为 2 GiBytes,这通常是进程可以寻址的最大内存空间,具体取决于您使用的操作系统。换句话说:您的数组比您的地址空间还要大。
因此,解决方案很明显:要么缩小数组(例如,通过将其分成块),要么扩大地址空间(在 Linux 中,您可以打补丁来获得 3、3.5 甚至 4 GiByte 的地址空间,当然,切换到 64 位操作系统和 64 位 Ruby 实现(!)也可以解决问题)。
或者,您需要重新考虑方法。也许使用 mmap
而不是数组,或者类似于此的东西。也许只有在需要时才延迟加载部分内容。