Lua对象的生命周期"全局返回"到C.

时间:2018-02-08 06:54:37

标签: c lua lua-api

所以我有一个非常简单的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指针无效?如果是,我该怎么做才能防止这种情况?

1 个答案:

答案 0 :(得分:1)

稍加注意,你可以将协程留在堆栈中。只需删除对lua_pop的调用。