kik*_*ito 2 performance complexity-theory lua time-complexity
在Lua中,__ index元方法可以是函数或表引用.所以以下结构是等价的:
foo = { a=1, b=2, c=3 }
bar = setmetatable({}, {__index = foo})
baz = setmetatable({}, {__index = function(_,x) return foo[x] end })
print(bar.a) -- 1
print(baz.b) -- 2
Run Code Online (Sandbox Code Playgroud)
似乎baz执行速度会慢一些.
但是慢多少?
我不太关心实现差异.我正在寻找的是"一般"的比较差异.我们是在谈论线性增量,一个数量级还是几个阶数?
给出一些背景:我正在开发一个oop库,在最常见的情况下(95%)表就足够了.但是有一个特殊情况我需要一个函数.知道差异将帮助我决定是否将库"拆分"为两个(一个快速覆盖95%的用途,一个模块使用其余的函数)或只是转储表选项以支持该功能.
广泛使用此特定__index(每次调用实例方法时).
如果这有帮助,我将使用的功能将非常小,类似于:
function __index(t,x) return foo[x] or bar[x] end
Run Code Online (Sandbox Code Playgroud)
非常感谢.
在算法上它们是相同的.它们都解析为相同的哈希表查找,平均时间为O(1).差异是不变的,主要来自函数调用开销.
在我的机器上,闭包比metatable查找慢约2.2倍(比直接查找慢2.5倍).在Codepad的服务器上进行测试,区别在于~2.
底线,在快速机器上(大约2010年),函数调用增加了大约十分之一微秒的恒定开销,否则性能是相同的.
顺便说一句,很多来自泥浆的LÖVE.:)
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |