6

根据 lua 5.1 手册,lua_xmove在属于同一 Lua 状态的不同线程的堆栈之间移动值。但是,我偶然碰巧用它在不同的 Lua 状态之间移动值,它似乎工作正常!是否有任何其他 API 可以将值从一种 Lua 状态移动到另一种状态(在 5.1 中),或者可以lua_xmove使用?

4

1 回答 1

5

Lua 将垃圾收集数据存储在全局状态中。因此,如果您跨状态移动 GC 或字符串对象,您可能会混淆垃圾收集器并创建悬空引用。

因此,虽然它看起来很有效,但它也很容易在以后引起问题。

作为参考,请参阅此邮件列表线程,开发人员在其中讨论此确切问题。

请注意,lua_xmove确实会检查全局状态是否相同:

api_check(from, G(from) == G(to));
于 2013-10-15T18:38:53.053 回答