要理解Lua和C的交互,先要理解堆栈和全局表两个概念
堆栈
Lua和C/C 语言交互的主要方法是一个无处不在的虚拟栈,栈的特点是先进后出.
- 在Lua中,Lua堆栈就是一个struct
- 堆栈索引的方式可是是正数也可以是负数
- 正数索引1永远表示栈底,负数索引-1永远表示栈顶
全局表
Lua的全局表可以想象成一个map哈希表结构,比如Lua有一个变量:
name = “hello world”
全局表中存放了name
和hello world
的对应关系, 可以通过name
在全局表中找到对应的hello world
交互方式
代码语言:javascript复制hello.lua
name = "hello world"
- C/C 想要获取Lua中的
name
字符串的值, 首先把name
放到堆栈(栈顶),方便Lua看到; - Lua从堆栈(栈顶)获取到
name
的值, 此时栈顶变为空; - Lua去全局表中查找
name
对应的字符串; - 全局表返回对应的字符串
hello world
; - Lua再次把
hello world
放到堆栈(栈顶); - C/C 从堆栈(栈顶)获取name的值.
**注意:**为了更好的展示原理,文中的图片来自于网络上博客中图片.
参考
- Lua篇(第01章):让Lua和C 牵手
- Lua初学者(四)–Lua调用原理展示(lua的堆栈)