gpt4 book ai didi

c - 在 Lua 中创建大型位数组的最佳方式

转载 作者:太空狗 更新时间:2023-10-29 16:48:49 26 4
gpt4 key购买 nike

我想使用 Lua 将一个大的二进制文件(大小为 1MB)读入内存。目标设备是移动设备,所以我非常想尽量减少内存占用。

从在线快速浏览来看,Lua 表似乎将使用 16B 用于每个顺序整数索引(键)加上存储值的空间,因为我存储二进制数据希望只使用 2 位但我们只说 1字节。

对于 1e6 条记录,将是 1e6*17 =~ 17MB - 这是巨大的!

从我的简短阅读来看,我似乎可以使用 userdata 在 C 中实现我想要的任何东西。我以前没有使用过 C,但它似乎会使用

1b * 1e6 = 125kB

我应该这样做还是我有什么非常错误的地方/有没有更简单的方法来做到这一点。

非常欢迎任何关于蹩脚计算的建议,甚至是骂人:)

编辑:下面关于将数据存储在字符串中(谢谢!)和使用按位运算的一些有趣答案。我刚刚在 PIL 书(第 3 版 pg293)中遇到了一个示例,该示例比较了在 C 中存储 bool 数组,因此它们使用了 3% 的内存。虽然这很酷而且很有用,但对我来说可能有点过头了,因为下面的解决方案表明我可以容纳 1MB,这对我来说很好。

编辑:遇到 this C blob impl

编辑:解决方案 - 我按照建议将文件内容读入字符串,因为我使用 5.1 必须使用第 3 方位操作库 - 我使用纯 Lua 实现 LuaBit .谢谢大家!!

最佳答案

你可以在 Lua 字符串中存储一个大的 blob,它可以处理任何二进制数据。现在的问题是你想用数据做什么。无论如何,您可以使用 string.byte提取任何单个字节,并使用 Lua 的 bit32图书馆深入研究。 (对于 Lua 5.1 及更早版本,您要么必须编写自己的 C 例程,要么使用第三方包。)

关于c - 在 Lua 中创建大型位数组的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616570/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com