Lua用户数据GC

标签 lua garbage-collection lua-userdata

一段Lua用户数据是否可以保存对Lua对象的引用? (比如一张表,或者另一条用户数据?)。基本上,我想知道的是:

我可以创建一段用户数据,当 gc 运行时,用户数据可以说:“嘿!我持有对这些其他对象的引用,也标记它们。”

编辑:回复lhf:

假设我有:

struct Vertex {
  double x, y, z;
}

struct Quaternion {
  double w, x, y, z;
}

现在,我可以做到:

struct Foo {
  Vertex v;
  Quaternion q;
}

但假设我想要:

struct Bar {
  Vertex *v;
  Quaternion *q;
}

[即假设顶点和四元数确实是很大的用户数据]。

现在,假设我有一个 Lua 用户函数,它接受一个 userdata 顶点和一个 userdata 四元数,并创建一个 userdata Bar(我不需要 userdata Foo,因为我想节省空间)——那么我需要以某种方式使用户数据 Vertex*/Quaternion* 不被 gc 编辑。

最佳答案

Is it possible for a piece of lua user data to hold reference to a lua object?

不可以。用户数据不能保存指向另一个 Lua 对象的指针。如果你想使用一个用户数据来保持另一个Lua对象的事件,你必须使用弱表来实现。罗伯托的书为 section on how to do it .

关于Lua用户数据GC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3034247/

相关文章:

lua - 我如何传递这些引用不同函数的参数?

redis - 如何将 "\""(双引号)从 lua 输出到控制台?

lua - 将金属 table 固定在 table 内

java - 解释 Java 垃圾收集日志摘要

java - 一旦执行异步任务任务,变量就会丢失数据

c++ - Lua API 推送用户数据

python - 构建 Lupa 时出错(可能是 pkg-config 的问题)

lua - 从纯Lua创建新的空用户数据

go - 将 Go Struct 实例转换为 Lua 表

java - 垃圾收集率与对象分配率