一段相同的lua代码执行1百万次,在不同的地方执行它的执行时间会有70倍的差距,这是为什么?

一段相同的lua代码执行1百万次,在不同的地方执行它的执行时间会有70倍的差距,这是为什么?

· json · rss
Subscribe:

About

这是由于lua的local机制导致的。

虽然你代码没有贴出来,我都没看懂写了啥。但是99%的概率是因为lua的local机制。

local是指局部变量的意思,所以在代码中会将变量存储在寄存器中。

自Lua 5.0之后,Lua采用了一种类似于寄存器的虚拟机模式。Lua用来储存其寄存器。每一个活动的函数,Lua都会其分配一个栈,这个栈用来储存函数里的活动记录。每一个函数的栈都可以储存至多250个寄存器,因为栈的长度是用8个比特表示的。
有了这么多的寄存器,Lua的预编译器能把所有的local变量储存在其中。这就使得Lua在获取local变量时其效率十分的高。

而全局变量会存储在内存当中,那么寄存器和内存之间的读取速度差异就是这两个速度的差异来源了。