Lua如何处理堆栈?
2012-8-9 7:49:49
收藏:0
阅读:146
评论:3
我正在尝试 Lua 并想知道 lua_State 如何工作。
state.c 中的代码和结果:
div.lua 中的代码:
local c = div(20, 10)
我发现 divide 函数中的 lua_State 与 main 中的是相同的,但它们在栈中具有不同的数据,这是如何实现的?
我知道了解这个的最好方法是阅读 Lua 的源代码,也许您可以告诉我在哪里找到正确的位置。
点赞
用户107090
当 Lua 调用一个已注册的 C 函数时,它会为其提供一个新的栈帧。
2012-08-09 11:38:46
用户856565
将lua_State想象为包含 Lua 堆栈以及界定当前可见部分的索引。当您调用Lua函数时,它可能看起来像您有一个新的堆栈,但实际上只有索引发生了更改。这是简化版本。
lua_State 在 lstate.h 中定义。 我已经为您提取了相关部分。 stack 是包含所有内容的大型 Lua 堆栈的开头。 base 是当前函数堆栈的开头。当函数执行时,这就是您的函数视为“堆栈”的内容。
struct lua_State {
/* ... */
StkId top; /* 栈内第一个空闲槽 */
StkId base; /* 当前函数的栈基 */
/* ... */
StkId stack_last; /* 栈内最后一个空闲槽 */
StkId stack; /* 栈底 */
/* ... */
};
第30章“线程和状态”讨论了 Lua 状态,您将在其中找到一些有用的信息。例如,lua_State 不仅表示 Lua 状态,而且还表示该状态中的一个线程。此外,所有线程都有自己的堆栈。
2012-10-10 02:01:44
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
它以与 任何事物 获取不同数据的方式获取不同的数据:代码改变对象内部的数据。
struct Object { int val; }; void more_stuff(Object *the_data) { //the_data->val 现在等于 5。 } void do_stuff(Object *the_data) { int old_val = the_data->val; the_data->val = 5; more_stuff(the_data); the_data->val = old_val; } int main() { Object my_data; my_data.val = 1; //my_data.val 等于 1。 do_stuff(&my_data); //my_data.val 仍旧等于 1。 }