前言
本文介绍lua虚拟机中是如何实现lua函数调用的,不涉及C函数的调用。下面通过栈帧结构以及lua调用栈组织形式来了解lua虚拟机中函数调用的过程。
数据栈
函数调用字节码
对以下的lua函数调用代码:
function wen(a,b)
print(a,b)
end
a = 1
b = 2
wen(a,b)
lua编译器会生成如下形式字节码:
CLOSURE 0 0 ; 0xb3c630
SETTABUP 0 -1 0 ; _ENV "wen"
SETTABUP 0 -2 -3 ; _ENV "a" 1
SETTABUP 0 -4 -5 ; _ENV "b" 2
GETTABUP 0 0 -1 ; _ENV "wen"
GETTABUP 1 0 -2 ; _ENV "a"
GETTABUP 2 0 -4 ; _ENV