lua程序性能优化(局部变量使用)

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操作,这样为代码的执行节省了时间。

  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值