Lua C - 有没有办法在 C 中保留一个值,但仍然没有对其进行垃圾回收?

Lua C - Is there a way to keep a value in C, but still have it not garbage collected?

我正在 lua c 中创建一个线程,但我想将其保留在 C 中,而不使其成为 environment/etc 中的变量。但是当我丢弃由 lua_newthread 推送的线程值时,它很快就会被垃圾收集,因此变得无用。 在这个线程中,我想 运行 用户传递的任意 lua 代码,允许他们使用与其他线程隔离的独占 functions/variables。

有没有办法将 thread/userdata/table 值标记为不可回收垃圾?

不,您必须在某处引用它或禁用 GC。 使用 lua_ref 引用在最隐蔽的地方:注册表。 (debug.getregistry())

这是可能的。 您可以使用 TValue 的 gcobj 作为参数添加对 gc_mark 的调用 gc_markroots.