我想使用 Lua 将一个大的二进制文件(大小为 1MB)读入内存。目标设备是移动的,所以我非常想尽量减少内存占用。
从网上的快速浏览看来,Lua 表将使用 16B 用于每个顺序整数索引(键)加上存储值的空间,因为我存储二进制数据希望只使用 2 位,但我们只说 1 字节。
对于 1e6 记录,它将是 1e6*17 =~ 17MB - 这是巨大的!
从我的简短阅读看来,我可以用userdata
C 来实现我想要的任何东西。我以前没有使用过 C,但它似乎会使用
1b * 1e6 = 125kB
我应该这样做还是我遇到了一些非常错误的事情/有没有更简单的方法可以做到这一点。
非常欢迎任何关于蹩脚计算的建议甚至是谩骂:)
编辑:下面有一些关于将数据存储在字符串中(谢谢!)和使用按位运算的有趣答案。我刚刚在 PIL 书(第 3 版 pg293)中遇到了一个示例,该示例比较了在 C 中存储布尔值数组,因此它们使用了 3% 的内存。虽然这很酷而且很有用,但对我来说可能有点过头了,因为下面的解决方案建议我可以放入 1MB,这对我来说很好。
编辑:遇到这个 C blob impl
编辑:解决方案 - 我按照建议将文件内容读入 String ,因为我使用 5.1 必须使用 3rd 方位操作库 - 我使用纯 Lua 实现LuaBit。感谢大家!!