2

I have a number of Lua scripts running in mac Mac OS application along with Objective C code. The memory footprint of my application continues to rise over time. Therefore, I decided to call collectgarbage function periodically from my Lua script. Since, I am new to Lua, I am not sure if I should call it in every script or calling it from any of the script is fine i.e. does it collect the garbage from all open Lua states or just from the states associated with the current Lua file?

4

2 回答 2

2

内存,就像 Lua 中的一切一样,是 per-Lua 状态。不同的 Lua 状态是完全独立的,在一个 Lua 状态中所做的任何事情都没有(直接)方式影响另一个 Lua 状态的内容。

此外,Lua 并不真正知道什么是“脚本”。或者一个文件。只有解释器当前正在执行的代码。它当然不会在每个“脚本”的基础上跟踪内存。

collectgarbage因此在它可以的水平上工作:它从当前的 Lua 状态收集垃圾。

于 2013-08-16T12:22:25.093 回答
0

如果您可以访问所有 Lua 状态,则可以使用lua_close从 Lua 状态收集所有垃圾并作为参数传递给它的函数。

void lua_close (lua_State *L);

然而,这会释放所有处于 Lua 状态的对象。

C API 的另一个更合理的替代方法是lua_gc方法。

int lua_gc (lua_State *L, int what);

无论哪种方式,您都需要向它传递一个状态,而垃圾收集器只会清除该特定状态使用的动态内存。

有关更多信息,请查阅lua_close手册lua_gc

http://www.lua.org/manual/5.2/manual.html

于 2013-08-16T12:29:30.803 回答