【发布时间】:2014-12-04 13:11:16
【问题描述】:
我正在将 FFT 代码从 Java 移植到 Lua,我开始有点担心这样一个事实:在 Lua 中,表的数组部分从 1 开始索引,而在 Java 中,数组索引从 0 开始。
对于输入数组,这不会导致任何问题,因为 Java 代码已设置为处理所考虑的数据不在数组开头的可能性。但是,代码内部的所有工作数组都假定从 0 开始索引。我知道代码将按编写的方式工作——Lua 表就像那样棒极了——但我对性能影响完全没有意义我可能通过将数组的“0”元素放入底层 C 结构的哈希表部分(或者实际上,如果会发生这种情况)。
我的问题:这值得担心吗?我是否应该计划分析和手动优化代码? (该代码最终将用于转换许多事先不知道的长度不等的相对较小(> 100 个时间点)的信号。)
【问题讨论】:
-
在分析显示您需要之后开始担心。我怀疑你不必担心。
-
我对 Lua 文档的理解是没有真正的数组构造。表可以用作数组,但索引值实际上只是一个键。尽管我记得读过一些关于整数键存储在一个区域中并且字符串键存储在散列中的信息,但我不确定底层表示。您可以使用与“0”不同的零 (0) 整数键。见lua.org/pil/2.5.html 见lua-users.org/wiki/TablesTutorial
-
但是这个常见问题解答luafaq.org/gotchas.html#T6 说零 (0) 的整数索引将被放入表的散列部分。但是没有日期。本文档描述了 Lua 性能技巧,包括表的使用。 lua.org/gems/sample.pdf
-
在 LuaJIT 中,
0处的元素将被放入表格的数组部分。 -
底线,表格尽可能高效,因为(几乎)所有不是 Lua 中简单标量值的东西都是表格。 “数组部分”是一种优化,数组部分中的键不属于数组部分的键没有成本。