在Lua中创建大数组的最佳方式
我想使用Lua读取一个大的二进制文件(大小为1mb)到内存中.目标设备是移动的,所以我非常希望最小化内存占用.
从一个快速的在线看,似乎Lua tabels将使用16B为每个顺序的整数索引(key)加上存储值的空间,我正在存储二进制数据,希望只能使用2位,但只能说1个字节. 对于1e6记录,将是1e6 * 17 =?17mB – 这是巨大的! 从我的简短的阅读看来,我可以使用userdata来实现我想要的任何东西.我以前没有使用过C,但它似乎会使用 1b * 1e6 = 125kB 我这样做还是让我有一些非常错误的事情/是否有更简单的方法来做到这一点. 任何建议,甚至名字叫笨重的计算非常欢迎:) 编辑:下面有关将数据存储在字符串中的一些有趣的答案(谢谢!)和使用按位操作.我刚刚在PIL书(第3版pg293)中比较了一个例子,比较了C中存储的布尔数组,所以他们使用了3%的内存.虽然这是很酷和有用的,可能是对我来说太过分了,因为下面的解决方案表明我可以适应1MB这对我来说很好. 编辑:跨越this C blob impl 编辑:解决方案 – 我按照建议将文件内容读入字符串,并且使用5.1使用第三方位操作的Im – 我用纯Lua实现LuaBit.感谢大家! 解决方法
您可以在Lua字符串中存储一个大blob,它将与任何二进制数据一起使用.现在的问题是你对数据的处理方式.无论如何,您可以使用
string.byte提取任何单个字节,并使用Lua的
bit32库来缩减位. (对于Lua 5.1及以上版本,您必须编写自己的C程序,或使用第三方程序包.)
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |