Lua对象的生命周期扩展到C语言中

所以我有一个非常简单的Lua脚本,像这样:

return coroutine.create(function () coroutine.yield(1) end)

然后在C语言中运行它并获取返回值

lua_State* l = luaL_newstate();
if(luaL_dostring(l, script) == LUA_OK) {
  lua_State* co = lua_tothread(l, lua_gettop(l));
  lua_pop(l, 1);
}

稍后,C代码将把co指针带回Lua中(使用lua_pushthread)并运行coroutine.resume(co)

我想知道Lua是否会在此期间扩展协同程序对象的GC,导致C中的co指针无效?如果是,我该怎么办?

点赞
用户107090
用户107090

使用一点小心,你可以只将协程留在栈中。只需移除对 lua_pop 的调用即可。

2018-02-08 11:12:26