1、局部变量优化
代码一
for i = 1, 1000000 do
local x = math.sin(i)
end
编译后代码
1 [1] LOADK 0 -1 ; 1
2 [1] LOADK 1 -2 ; 1000000
3 [1] LOADK 2 -1 ; 1
4 [1] FORPREP 0 4 ; to 9
5 [2] GETGLOBAL 4 -3 ; math
6 [2] GETTABLE 4 4 -4 ; "sin"
7 [2] MOVE 5 3
8 [2] CALL 4 2 2
9 [1] FORLOOP 0 -5 ; to 5
10 [3] RETURN 0 1
代码二
local sin = math.sin
for i = 1, 1000000 do
local x = sin(i)
end
编码后代码
1 [1] GETGLOBAL 0 -1 ; math 循环中的代码被放在外部执行
2 [1] GETTABLE 0 0 -2 ; "sin"
3 [2] LOADK 1 -3 ; 1
4 [2] LOADK 2 -4 ; 1000000
5 [2] LOADK 3 -3 ; 1
6 [2] FORPREP 1 3 ; to 10
7 [3] MOVE 5 0 循环中增加了移动的代码
8 [3] MOVE 6 4
9 [3] CALL 5 2 2
10 [2] FORLOOP 1 -4 ; to 7
11 [4] RETURN 0 1
可以看出GETGLOBAL、GETTABLE两个操作被移到了循环之外,而增加了一个MOVE操作,这样为代码的执行节省了时间。