2009-11-09 54 views
2

我需要一个游戏状态对象in lua(不是C++或绑定到C++)来管理灯光,摄像头,对象,来自我的C++引擎的事件(lua对象是来自C++的独立实体,几乎只是标准的lua表) 。我担心GC将如何去除这些对象,因为它们将在运行中被创建和删除。打开GC输出的最佳方式是什么?我在我的代码中嵌入了lua源代码...lua垃圾回收器调试输出的最佳方式是什么?

回答

4

Lua垃圾收集器没有任何输出。你有两个选择。

首先,您可以为Lua提供一个自定义分配器。这将让你跟踪Lua如何以及何时分配和释放内存。这将告诉GC如何多次请求更多的内存以及释放内存的频率。您还可以添加分配跟踪,以便在应用程序退出时检测“泄漏”的内存。

既然你有源代码,你也可以直接在Lua垃圾收集器代码中添加工具。它自己包含在lugc.c中。

+0

不错的答案!这正是我所期待的。 – Joe 2009-11-24 20:52:21

-1

您是否阅读过Lua手册?

Lua对象完全隐藏在C++端,因此您必须将每个Lua对象放入一个特殊的哈希表中,并在您销毁C++对象时从其中删除它。如果C++和Lua对象具有相同的生命周期,则可以简单地在ctor/dtor中执行此代码。

如果你想要一些调试输出的GC我想你必须添加printf行直接到lua源代码中,因为在标准Lua代码库中没有AFAIK代码。