加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

传递给lua_CFunctions的lua_State指针是否保证指向与调用函数相

发布时间:2020-12-14 21:46:17 所属栏目:大数据 来源:网络整理
导读:上下文:我正在研究一组绑定,我的许多函数都引用了“全局”Lua状态. (它在我正在开发的代码中实际上不是全局的,但在特定的运行时实例本地,所以全局,因为所有的回调函数都可以访问共享状态.) Lua文档似乎没有指定传递给lua_CFunction的指针是否保证是指向与调
上下文:我正在研究一组绑定,我的许多函数都引用了“全局”Lua状态. (它在我正在开发的代码中实际上不是全局的,但在特定的运行时实例本地,所以全局,因为所有的回调函数都可以访问共享状态.)

Lua文档似乎没有指定传递给lua_CFunction的指针是否保证是指向与调用函数完全相同的lua_State对象的指针(直接通过lua_cpcall()或通过调用调用C的Lua代码间接指向功能).

一个小测试表明指针引用了同一个对象,但我不知道这是否有保证.

#include <stdio.h>
#include <lua5.1/lua.h>
#include <lua5.1/lauxlib.h>

static lua_State *state;

static int test_fn(lua_State *L)
{
    printf("global:%p local:%pn",state,L);
    return 0;
}

int main(int argc,char const **argv)
{
    state = luaL_newstate();

    luaL_openlibs(state);
    lua_register(state,"test_fn",test_fn);

    luaL_dostring(state,"test_fn()");

    lua_close(state);
}

示例输出:

global:0x87ef008 local:0x87ef008

我知道Lua为函数提供了一个只包含该函数的参数的堆栈,这让我有点不安,也许这可以通过将该函数传递给跟踪独立堆栈的不同状态指针来实现.它也可以实现任何其他方式,不需要不同的lua_State – 实际上我希望它确实以这种方式工作 – 但文档似乎没有明确说出任何一种方式.

这些指针是否保证相等?如果没有,在什么情况下可能会有所不同?

解决方法

如果从Lua代码调用C函数,那么lua_State参数将是调用Lua函数的Lua线程.

如果您的Lua代码不使用协同程序,则只有一个线程,因此您将始终获得全局状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读