[ create a new paste ] login | about

Link: http://codepad.org/gWfTwRK0    [ raw code | output | fork ]

Lua, pasted on Dec 5:
local foo = { a=1, b=2, c=3 }
bar = setmetatable({}, {__index = foo})
baz = setmetatable({}, {__index = function(_,x) return foo[x] end })

local iterations, begin, a,b,c = 1000000

begin = os.clock()
for i=1,iterations do a,b,c = foo.a,foo.b,foo.c end
local direct = os.clock() - begin

begin = os.clock()
for i=1,iterations do a,b,c = bar.a,bar.b,bar.c end
local meta = os.clock() - begin

begin = os.clock()
for i=1,iterations do a,b,c = baz.a,baz.b,baz.c end
local closure = os.clock() - begin

local nop = function(x,y) return begin end
begin = os.clock()
for i=1,iterations do nop(10,20) nop(10,20) nop(10,20)  end
local funcoverhead = os.clock() - begin

local function printf(...) print(string.format(...)) end
printf('%25s: %.2f', 'direct', direct)
printf('%25s: %.2f (%.2f * direct)', 'metatable', meta, meta/direct)
printf('%25s: %.2f (%.2f * metatable)', 'closure', closure, closure/meta)
printf('%25s: %.2f', 'metatable + func overhead', meta + funcoverhead)


Output:
1
2
3
4
                   direct: 0.06
                metatable: 0.12 (2.00 * direct)
                  closure: 0.28 (2.33 * metatable)
metatable + func overhead: 0.25


Create a new paste based on this one


Comments: