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

优化 – 如何在Lua中预先调整数组大小?

发布时间:2020-12-15 00:25:45 所属栏目:大数据 来源:网络整理
导读:我有一个Lua程序似乎比它应该的慢.我怀疑问题在于我一次向一个关联数组添加值,并且表每次都必须分配新的内存. 似乎确实有一个table.setn函数,但它在Lua 5.1.3下失败了: stdin:1: 'setn' is obsoletestack traceback: [C]: in function 'setn' stdin:1: in m
我有一个Lua程序似乎比它应该的慢.我怀疑问题在于我一次向一个关联数组添加值,并且表每次都必须分配新的内存.

似乎确实有一个table.setn函数,但它在Lua 5.1.3下失败了:

stdin:1: 'setn' is obsolete
stack traceback:
        [C]: in function 'setn'
        stdin:1: in main chunk
        [C]: ?

我从谷歌搜索中收集到了我已经完成的这个功能在Lua 5.1中被折旧了,但我找不到什么(如果有的话)取代了这个功能.

你知道如何在Lua中预先确定一张桌子吗?

或者,当您向表中添加对象时,是否有其他方法可以避免内存分配?

解决方法

让我更专注于你的问题:

adding values to an associative array
one at a time

Lua中的表是关联的,但是以数组形式(1..N)使用它们是优化的.他们内部有双面.

所以..如果你确实是以关联方式添加值,请遵循上面的规则.

如果使用索引1..N,则可以通过设置t [100000] =某事来强制执行一次性大小调整.这应该工作,直到在Lua源中指定的优化数组大小的限制(2 ^ 26 = 67108864).在那之后,一切都是联想的.

附:旧的’setn’方法仅处理数组部分,因此它不适用于关联用法(忽略这些答案).

p.p.s.你有没有研究过保持Lua性能高的一般技巧?即知道表创建而不是重用表而不是创建新表,使用’local print = print’等来避免全局访问.

(编辑:李大同)

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

    推荐文章
      热点阅读