我需要一个游戏状态对象在lua(不是c ++或与C ++绑定)来管理来自我的C ++引擎的灯光,相机,对象,事件(lua对象是来自c ++的独立实体,非常漂亮很多只是标准的lua表)。我担心GC将如何移除这些对象,因为它们将在动态创建和删除。打开GC输出的最佳方法是什么?我的代码中嵌入了lua源代码......
答案 0 :(得分:4)
Lua垃圾收集器没有任何输出。你有两个选择。
首先,您可以为Lua提供自定义分配器。这将让您跟踪Lua分配和释放内存的方式和时间。这将告诉GC多长时间要求更多内存以及它释放内存的频率。您还可以添加分配跟踪,以便在应用程序退出时检测“泄露”的内存。
由于您拥有源代码,因此您还可以直接向Lua垃圾回收器代码添加检测。它自包含在lugc.c。
中答案 1 :(得分:-1)
您是否阅读过Lua手册?
Lua对象完全隐藏在C ++端,因此您必须将每个Lua对象放入一个特殊的哈希表中,并在销毁C ++对象时将其从那里删除。如果C ++和Lua对象具有相同的生命周期,您只需在ctor / dtor中执行此代码即可。
如果你想要GC的一些调试输出,我想你必须直接在lua源代码中添加printf行,因为在标准的Lua代码库中有AFAIK没有这个代码。