Lua 垃圾回收器调试输出的最佳方式是什么?

我需要一个Lua游戏状态对象(不在C ++或与C ++相关)来管理我的C ++引擎中的光源,摄像机,物体和事件(lua对象与c ++是分离的实体,基本上只是标准lua表)。我担心垃圾收集器在移除这些对象时会如何处理,因为它们将在运行时创建和移除。如何最好地打开GC输出?我在我的代码中嵌入了Lua源代码......

原文链接 https://stackoverflow.com/questions/1703013

点赞
stackoverflow用户155082
stackoverflow用户155082

你读过Lua手册吗?

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

如果你想要一些关于GC的调试输出,我猜你必须直接向Lua源代码中添加printf行,因为在标准Lua代码库中似乎没有这方面的代码。

2009-11-09 19:24:20
stackoverflow用户48940
stackoverflow用户48940

Lua垃圾回收器没有输出。在这里有两个选择。

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

由于您拥有源代码,也可以直接在Lua垃圾回收器代码中添加仪器。它是在lugc.c中自包含的。

2009-11-24 18:34:57