0x1. 全局变量
- 全局变量
每个函数的结构中都会有一个global_var = 1
env
变量用于指向其环境变量表。默认从父函数继承过来,源文件则直接使用lua_State
的l_gt
。由于lua中没有变量定义这么一说,因此在函数间的全局变量是属于同一变量。
0x2. 局部变量
函数内局部变量
function fun1() local var = 1 end
这种直接保存到栈中,寄存器索引直接编码到指令中。
函数外局部变量
function parent() local pvar = 1 function clild() print(pvar) --访问上层函数的局部变量 end end
这个也是常说的
upValue
,由于在lua中每个函数都有一个对应栈,但是又需要直接子函数访问父函数的本地变量。例如上面的例子clild
函数访问了parent
函数中的局部变量pvar
。所以在lua中引入了upvalue放到函数中,用于表明当前函数有多少变量是父函数的变量。并有对应的指令用于操作upvalue
0x3. Registry
用于C语言保存数据用的,防止lua代码破坏c代码的数据。