【发布时间】:2015-09-22 04:58:39
【问题描述】:
我需要创建一个包含 30 亿个布尔变量的数组。我的内存只有 4GB,因此我需要这个数组非常紧凑(每个变量最多一个字节)。理论上这应该是可能的。但我发现 Ruby 为数组中的一个布尔变量使用了太多空间。
ObjectSpace.memsize_of(Array.new(100, false)) #=> 840
每个变量超过 8 个字节。我想知道 Ruby 中是否有更轻量级的 C 数组实现。
除了一个小的配置文件,我还需要这个数组的每个布尔值都可以快速访问,因为我需要根据需要尽可能快地翻转它们。
【问题讨论】:
-
使用位图。有一个字符串,只需翻转它的单个位。没有数组开销,每个字节 8 个值。酷吧? :)
-
你为什么不把你的位存储在整数中?
-
@cremno: NArray.byte 似乎不支持长度超过 2^31 的数组。
-
@trVoldemort,你为什么问小尺寸? Ruby 不像普通的 C 那样又快又小。Ruby 为糖果函数和 oop 付出了速度和大小。只是......如果你想要优化,请转到 C