在lua中,如何为malloced userdata实现__gc方法?

我在我的C API中使用malloc分配了一个userdata。我应该在哪里释放它?

我应该为该userdata编写一个__gc方法,并在其中free它吗?如果是,那么垃圾收集器也会释放它,这不是双重释放吗?

点赞
用户106104
用户106104

Lua 的垃圾回收器并不知道你使用 malloc 分配了一些内存,因此它不会为你释放它。

Lua 将释放由 Lua 分配的内存。你必须释放你自己分配的内存。

2013-12-24 10:08:47
用户107090
用户107090

只有完整的 userdata 才能具有垃圾回收方法,而完整的 userdata 必须使用 lua_newuserdata 创建。

轻量级 userdata 只是 C 空间中的指针,因此必须由 C 主机进行管理。轻量级 userdata 不能具有垃圾回收方法。

2013-12-24 16:00:07