使用局部变量初始化数值 math.huge 和直接使用 math.huge 在 Lua 脚本中的性能对比

在 Lua 脚本中,创建一个名为 "Infinity" 的局部变量并将其初始化为 math.huge,或者直接在与“Infinity”比较的地方使用 math.huge,哪种方式更好呢?

local Infinity = math.huge
local someVar = 999999
local output = nil
if someVar < Infinity then
  output = 0.666
else
  output = -1
end
print(output)

还是

local someVar = 999999
local output = nil
if someVar < math.huge then
  output = 0.666
else
  output = -1
end
print(output)

假设实际 Lua 脚本更大,需要多次比较与 Infinity 相关的数值。那么这两种方式有什么区别呢? 或者根本没有区别(在这种情况下,我会选择直接使用 math.huge,以节省局部变量)?

原文链接 https://stackoverflow.com/questions/69441859

点赞
stackoverflow用户10391157
stackoverflow用户10391157

LuaJIT 可以自动完成这个操作,因此不建议使用。(基于我的阅读和测试,如果有任何合适的来源,请在评论中指出)

然而单独使用 Lua 的话 官方文档 表示局部变量会更快。

我进行了一个小型的基准测试,1 十亿次迭代,您的代码,Zerobrane Studio 中捆绑的 Lua,时间值以秒为单位。

Lua 5.2Lua 5.3LuaJit全局变量21.4824.860.25局部变量9.3112.040.25

尽管代码非常简短,可能无法反映实际代码,但结果是清晰的。但是,如果您不打算经常使用 math.huge,则不要浪费时间进行过早的优化。

2021-10-05 16:31:16