加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

在Lua中创建大数组的最佳方式

发布时间:2020-12-15 00:27:31 所属栏目:大数据 来源:网络整理
导读:我想使用Lua读取一个大的二进制文件(大小为1mb)到内存中.目标设备是移动的,所以我非常希望最小化内存占用. 从一个快速的在线看,似乎Lua tabels将使用16B为每个顺序的整数索引(key)加上存储值的空间,我正在存储二进制数据,希望只能使用2位,但只能说1个字节.
我想使用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程序,或使用第三方程序包.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读