linux – 如何在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(来自Activity Monitor)

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

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

内存使用量增长到79.0MB

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

a = nil
collectgarbage("collect")

内存使用量低至25.0MB

好.这是我的问题.

为什么剩下25MB?

如何释放或回收它们?

最佳答案
我可以重现你的结果.我不确定活动监视器真的报告了什么,但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

为什么Activity Monitor仍然报告25Mb打败了我.我认为这只是因为free将内存返回给进程,而不是返回操作系统.

相关文章

linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、...
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别...
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书...
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满...
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的...
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线...