我需要一个游戏状态对象in lua(不是C++或绑定到C++)来管理灯光,摄像头,对象,来自我的C++引擎的事件(lua对象是来自C++的独立实体,几乎只是标准的lua表) 。我担心GC将如何去除这些对象,因为它们将在运行中被创建和删除。打开GC输出的最佳方式是什么?我在我的代码中嵌入了lua源代码...lua垃圾回收器调试输出的最佳方式是什么?
2
A
回答
4
Lua垃圾收集器没有任何输出。你有两个选择。
首先,您可以为Lua提供一个自定义分配器。这将让你跟踪Lua如何以及何时分配和释放内存。这将告诉GC如何多次请求更多的内存以及释放内存的频率。您还可以添加分配跟踪,以便在应用程序退出时检测“泄漏”的内存。
既然你有源代码,你也可以直接在Lua垃圾收集器代码中添加工具。它自己包含在lugc.c中。
-1
您是否阅读过Lua手册?
Lua对象完全隐藏在C++端,因此您必须将每个Lua对象放入一个特殊的哈希表中,并在您销毁C++对象时从其中删除它。如果C++和Lua对象具有相同的生命周期,则可以简单地在ctor/dtor中执行此代码。
如果你想要一些调试输出的GC我想你必须添加printf行直接到lua源代码中,因为在标准Lua代码库中没有AFAIK代码。
不错的答案!这正是我所期待的。 – Joe 2009-11-24 20:52:21