在Lua中,脚本和C语言程序之间的值传递是通过栈进行的,也就是说,栈是它们之间的枢纽。其中一方会将值写到栈中,供另一方读取。Lua的栈是一个线性数组,栈中的每一项元素的类型都是TValue,它是Lua表示内部数据的数据结构。栈的最大空间在luaconf.h中给出:#define LUAI_MAXSTACK 1000000。
栈包括:基指针、栈顶指针、栈大小。图中的stack->top表示栈顶指针。其实在Lua中栈的很多空间都留作它用,如call info也使用一部分的栈。
下图主要包括两个方面:
1)红色圆角矩形框表示一个C程序,可以认为它由两部分构成,即用户代码和lualib库,在图中用虚线分割。(注意:实际两者为一体,为了讲解方便,于是将它们分开。)
2)黄色的lua脚本。
执行过程如下:
1)C程序读取Lua脚本
2)lualib库解析脚本,并保存解析结果。
3)通过Lua API,将解析结果中的某一个值放入栈中。
3)C程序通过Lua提供的API到栈中取得数据。
经过上面的过程C语言程序和Lua脚本就能相互传值了。