|
Lars Müller:
I did some benchmarking using the following code:You should look out since as you noted the length of the array and hash part are power of two's, so in the worst case this can give double the cost when using random lengths. So using power of two's instead of 1e7 would be better.
for i = 1, 10 do collectgarbage"collect" end; c = collectgarbage"count"; t = {}; for i = 1, 1e7 do t[i+.5] = i end; d = collectgarbage"count"; print((d - c) * 1e3 / 1e7, "bytes per entry")
I would argue that this is not surprising as LuaJIT uses NaN boxing which allows to store all values in 8 bytes instead of the 16 used by PUC Lua which is reflected in your benchmarking.For the list part I simply used "t[i] = i" in the above code. Surprisingly the list part only takes 13 bytes per entry on LuaJIT (!) vs 26 bytes per entry on Lua 5.1 and Lua 5.4.