将值声明为本地值一次比每次声明本地值慢。
2016-5-19 15:35:24
收藏:0
阅读:113
评论:1
如何可能呢?这段代码:
local t
for n = 0, 255 do
t = math.random(0, 255)
...
end
实际上比下面的代码慢?
for n = 0, 255 do
local t = math.random(0, 255)
...
end
由于我在 ... 部分访问 t 多次,我想知道,for 循环是否有它们自己的本地变量?如果是,那么从当前块访问本地变量是否比从外部块访问本地变量更快?
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
一般来说,尽可能将变量声明为本地变量。是更好的编码风格,而且通常更加优化,就像这个例子所示的那样,
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, 1 upvalue, 5 locals, 5 constants, 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正如你看到的,第一个代码块有两条额外的指令,其中一条指令在循环内部:
这个指令将寄存器5中的结果(即
math.random的结果)移动到寄存器0中(即变量t所在的位置)。这就回答了你的问题。