lua的局部变量为什么要比全局变量快
Posted preston
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了lua的局部变量为什么要比全局变量快相关的知识,希望对你有一定的参考价值。
这个点是绝大部分Lua性能问题产生的原因,尤其是和一个频繁调用的函数组合,会产生大量的开销。总的来说,我们在一个频繁调用的函数内,应该避免重复地去查询Table,应该把Table内我们常用的值缓存起来
不管是函数还是对象,不管是Lua自身的库,还是我们自己写的,在Lua中都是储存在_G中的某个节点下。当我们调用一个函数/对象的时候,Lua首先会去他们的表中查找到这个函数/对象,而我们使用局部变量的话,所以这个访问就会快很多
尤其是新来的开发者, 使用GetComponent来获取组件然后进行一些操作。由于没有用变量缓存起来,每次用完了就抛弃,再用再获取。这不仅会造成很大的耗时,还会造成很大的内存开销
在解析这个问题前, 我们先了解lua解析器是如何构造出局部变量的
当创建一个新变量时,最后会调用一个Singlevaraux来进行变量的查找,大致流程如下:
1. 如果变量在当前函数的LocVar结构体数组中找到,那么这个变量就是局部变量,类型为VLOCAL
2. 如果在当前函数中找不到,就往上一层block来查找,如果在某一层查到了,那么这个变量就是UpValue,类型为VUPVAL
3. 如果最后那层都没有查到,那么这个变量就是全局变量,类型为VGLOBAL
因为所有局部变量都会在函数栈中有一个对应的位置,所以把它的类型修改为VNONRELOC。
下图可见 因为变量a, b 在同一个函数栈中,所以使用指令Move1 0 完成将a 赋值给b 的操作
以上是关于lua的局部变量为什么要比全局变量快的主要内容,如果未能解决你的问题,请参考以下文章
使用Lua 局部变量来优化性能,同一时候比較局部变量和全局变量