C/C++调用lua实现原理

一、运用lua脚本与C++结合的优势

lua作为一种脚本语言,在与C++程序配合使用时,有着很大的优势,尤其在为C++程序做参数解析时,更新通信数据格式时,无需更改C++代码进行重新编译,只需要更改lua脚本程序即可。

lua与C/C++的数据通信是基于共享内存,即lua堆栈实现的,这使得lua程序在与C++程序混合使用时,还存在一个对于C/C++程序的一个天然优势,就是在lua内部不需要进行实例的delete操作:

 1、lua中,number(C++中的int)、boolean、nil、light userdata四种类型的值是直接存储在lua堆栈上元素里的,和垃圾回收无关;

2、lua中,table、string、thread、userdata和closure等类型是以指针的形式存放在堆栈里的,它们在生命周期结束时,会被自动地垃圾回收。

二、什么是lua堆栈

lua堆栈是一个虚拟堆栈,遵循先进后出的原则,但其本质上就是一个struct结构体。堆栈的索引可以是正数,也可以是负数,区别在于

正数1索引的位置在栈底,负数-1索引的位置在栈顶。如下图所示。


三、堆栈的操作

现在有很多的高级程序员,习惯性地运用封装代码的形式来将C++调用lua给封装在类的内部,但是万变不离其宗,最终都是

在底层还是通过操作堆栈实现的,操作堆栈简单的说就是出栈和入栈。lua堆栈支持多种数据格式压栈,例如数字(包括int、float和

double)、字符串、表、实例对象等等,实例对象我们也可以称作闭包或者黑包,当然也能将函数压入堆栈进行调用。

 1、入栈操作示例:


2、出栈操作示例:

  • 3
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值