图解Lua中的栈

本文详细介绍了Lua脚本与C程序之间如何通过栈传递值,包括Lua栈的基本结构及其最大容量,以及C程序如何利用Lua API与Lua脚本进行数据交换。


在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脚本就能相互传值了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值