一、运用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、出栈操作示例: