如何在lua中处理这个内存泄漏?

e39*_*62r 5 linux macos lua

我的机器是mac mini(2011)osx10.7.4

首先.我从lua.org下载lua-5.2.2,解压缩它,然后

$ make macosx
$ make install
Run Code Online (Sandbox Code Playgroud)

然后我跑了

$ lua
Lua 5.2.2  Copyright (C) 1994-2013 Lua.org, PUC-Rio
> 
Run Code Online (Sandbox Code Playgroud)

现在的内存使用量为816KB(来自Activity Monitor)

然后我输入以下代码用于malloc ...

a = {}
for i = 1, 999999 do
    a[i] = {}
end
Run Code Online (Sandbox Code Playgroud)

内存使用量增长到79.0MB

然后我输入下面的代码来表示dealloc ...

a = nil
collectgarbage("collect")
Run Code Online (Sandbox Code Playgroud)

内存使用量低至25.0MB

好.这是我的问题.

为什么剩下25MB?

如何释放或回收它们?

lhf*_*lhf 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)
Run Code Online (Sandbox Code Playgroud)

我得到这个输出

22.55078125
78906.55078125
22.64453125
Run Code Online (Sandbox Code Playgroud)

为什么活动监视器仍然报告 25Mb 让我很困惑。我认为这只是因为free将内存返回给进程,而不是返回给操作系统。