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

5

我的电脑是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(来自“活动监视器”)

然后我输入下面的代码进行malloc……

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

内存使用量增长至79.0MB

然后我输入以下代码进行dealloc...

a = nil
collectgarbage("collect")

内存使用量降至25.0MB。

好的,这是我的问题。

为什么还剩下25MB?

如何释放或回收它们?


Lua本身会消耗一些内存。 - Raptor
1
@ShivanRaptor 但最初报告的使用量为816KB,而在GC之后报告的最终使用量为25MB(超过30倍!)- 魔鬼(和更有趣的部分)在于细节。 - user2864740
6
注意:这并不是一个内存泄漏。如果重复运行代码导致内存占用不断增加,那就是另一回事了。 - user2864740
1个回答

4

我可以重现你的结果。我不确定Activity Monitor实际上报告了什么,但是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将内存返回给进程,而不是返回给操作系统。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接