我需要创建一个包含30亿个布尔变量的数组.我的内存只有4GB,因此我需要这个数组非常紧凑(每个变量最多一个字节).从理论上讲,这应该是可能的.但是我发现Ruby在数组中为一个布尔变量使用了太多的空间.
ObjectSpace.memsize_of(Array.new(100, false)) #=> 840
Run Code Online (Sandbox Code Playgroud)
每个变量超过8个字节.我想知道Ruby中是否有更轻量级的C数组实现.
除了一个小的配置文件,我还需要每个布尔这个数组可以快速访问,因为我需要尽可能快地翻转它们.
小智 0
Ruby 不是一种性能良好的语言,尤其是在内存使用方面。正如其他人所说,您应该将布尔值放入数字中。由于 ruby 的“对象化”,您将丢失大量内存。如果这对您来说是一个糟糕的情况,您可以存储到大长度的字符串并将字符串存储在数组中,从而损失更少的内存。
http://calleerlandsson.com/2014/02/06/rubys-bitwise-operators/
您还可以用 C++ 实现自己的 gem,它自然可以使用位和双精度数,从而损失更少的内存。双精度数组意味着每个位置有 64 个布尔值,对于您的应用程序来说绰绰有余。
非常大的对象始终是一个问题,并且需要您实施大量操作才能更轻松地处理大型对象集合。当然,您至少必须实现某种方法来访问存储多个布尔值的对象数组中的某个位置,以及其他方法来翻转它们。
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |