如何处理Lua中的内存泄漏?

我的设备是 mac mini(2011) osx10.7.4

首先,我从 lua.org 下载了 lua-5.2.2,解压后执行以下命令:

$ make macosx
$ make install

然后运行它

$ lua
Lua 5.2.2  Copyright (C) 1994-2013 Lua.org, PUC-Rio
>

此时内存使用量为 816KB (来自“活动监视器”)

接下来,我输入如下代码分配内存...

a = {}
for i = 1, 999999 do
    a[i] = {}
end

内存使用量增长到 79.0MB

然后我输入以下代码释放内存...

a = nil
collectgarbage("collect")

内存使用量降低到 25.0MB

好的,这里是我的问题。

为什么会剩下 25MB?

如何释放或回收它们?

点赞
用户107090
用户107090

我能够重现你的结果。我不确定活动监视器实际报告的内容,但 Lua 认为它已经释放了所有内存:

collectgarbage("collect")
local m0=collectgarbage("count"); print(m0)
a = {}
for i = 1, 999999 do
    a[i] = {}
end
local m1=collectgarbage("count"); print(m1)
a = nil
collectgarbage("collect")
local m2=collectgarbage("count"); print(m2)

我得到了这个输出:

22.55078125
78906.55078125
22.64453125

为什么活动监视器仍然报告 25MB,这超出了我的理解。我认为这只是因为 free 将内存返回给进程,而不是返回给操作系统。

2013-12-06 10:08:00