优化 – 将值声明为本地值一次比每次声明本地值慢

优化 – 将值声明为本地值一次比每次声明本地值慢,第1张

概述这段代码怎么可能: local tfor n = 0, 255 do t = math.random(0, 255) ...end 实际上比这个慢吗? for n = 0, 255 do local t = math.random(0, 255) ...end 由于我在…部分不止一次访问,我想知道,for循环有自己的局部变量集吗?如果是,从当前块访问本地变量比 这段代码怎么可能:

local tfor n = 0,255 do    t = math.random(0,255)    ...end

实际上比这个慢吗?

for n = 0,255 do    local t = math.random(0,255)    ...end

由于我在…部分不止一次访问,我想知道,for循环有自己的局部变量集吗?如果是,从当前块访问本地变量比从外部块访问本地变量更快?

解决方法 通常,将变量声明为尽可能本地.是的,for循环有自己的范围.这是更好的编码风格,正如这个例子所示,通常更优化.

让我们看看两个代码生成的指令,使用luac -l

第一件作品:

main <t.lua:0,0> (13 instructions at 00000000005e8260)0+ params,8 slots,1 upvalue,5 locals,5 constants,0 functions        1       [1]     LOADNIL         0 0        2       [2]     LOADK           1 -1    ; 0        3       [2]     LOADK           2 -2    ; 255        4       [2]     LOADK           3 -3    ; 1        5       [2]     FORPREP         1 6     ; to 12        6       [3]     GETTABUP        5 0 -4  ; _ENV "math"        7       [3]     GETtable        5 5 -5  ; "random"        8       [3]     LOADK           6 -1    ; 0        9       [3]     LOADK           7 -2    ; 255        10      [3]     CALL            5 3 2        11      [3]     MOVE            0 5        12      [2]     FORLOOP         1 -7    ; to 6        13      [4]     RETURN          0 1

第二部分:

main <t.lua:0,0> (11 instructions at 0000000000538260)0+ params,7 slots,0 functions        1       [1]     LOADK           0 -1    ; 0        2       [1]     LOADK           1 -2    ; 255        3       [1]     LOADK           2 -3    ; 1        4       [1]     FORPREP         0 5     ; to 10        5       [2]     GETTABUP        4 0 -4  ; _ENV "math"        6       [2]     GETtable        4 4 -5  ; "random"        7       [2]     LOADK           5 -1    ; 0        8       [2]     LOADK           6 -2    ; 255        9       [2]     CALL            4 3 2        10      [1]     FORLOOP         0 -6    ; to 5        11      [3]     RETURN          0 1

如你看到的.第一部分有两条额外的说明.其中一个是在循环内:

11      [3]     MOVE            0 5

这样做是为了将寄存器5中的结果(具有math.random的结果)移动到寄存器0(变量t所在的位置).这就回答了你的问题.

总结

以上是内存溢出为你收集整理的优化 – 将值声明为本地值一次比每次声明本地值慢全部内容,希望文章能够帮你解决优化 – 将值声明为本地值一次比每次声明本地值慢所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1228007.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-05
下一篇 2022-06-05

发表评论

登录后才能评论

评论列表(0条)

保存