作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 Lua 程序,它似乎比应有的速度要慢。我怀疑问题在于我一次向关联数组添加一个值,并且表每次都必须分配新的内存。
似乎确实有一个table.setn函数,但在Lua 5.1.3下失败:
stdin:1: 'setn' is obsolete
stack traceback:
[C]: in function 'setn'
stdin:1: in main chunk
[C]: ?
我从 Google 搜索中得知,此功能在 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 高性能的一般技巧?即了解表创建并重用表而不是创建新表,使用“本地 print=print”等以避免全局访问。
关于optimization - 如何在 Lua 中预先确定数组的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/124455/
我是一名优秀的程序员,十分优秀!