我在mac Mac OS应用程序中运行了许多Lua脚本以及Objective C代码。我的应用程序的内存占用量持续增长。因此,我决定定期从我的Lua脚本中调用collectgarbage
函数。因为,我是Lua的新手,我不确定是否应该在每个脚本中调用它,或者从任何脚本调用它都没问题,即它是从所有打开的Lua状态收集垃圾还是仅从与当前关联的状态收集垃圾Lua档案?
答案 0 :(得分:1)
与Lua中的所有内容一样,内存属于每个Lua状态。不同的Lua状态完全分开,并且没有(直接)方式在一个Lua状态中完成任何事情以影响另一个Lua状态的内容。
另外,Lua并不真正知道“脚本”是什么。或者一个文件。只有解释器恰好正在执行的代码。它肯定不会在每个“脚本”的基础上跟踪内存。
collectgarbage
因此可以在它可以的级别上工作:它从当前的Lua状态收集垃圾。
答案 1 :(得分:0)
如果您可以访问所有Lua状态,则可以使用lua_close
函数来收集您传递给Lua状态的所有垃圾作为参数。
void lua_close (lua_State *L);
C API的另一个替代方法是lua_gc
方法。
int lua_gc (lua_State *L, int what, int data);
无论哪种方式,您都需要将状态传递给它,垃圾收集器只会清除该特定状态使用的动态内存。
有关详细信息,请在手册中查找lua_close
和lua_g
c