为什么在调用 collectgarbage("count") 后运行此场景 Lua 堆内存会增长?

运行以下 Lua 代码:

collectgarbage("collect")
collectgarbage("stop")

local a,b = {},{}

local m0 = collectgarbage("count")
local m1 = collectgarbage("count")
local m2 = collectgarbage("count")
local m3 = collectgarbage("count")
local m4 = collectgarbage("count")

print(m0 * 1024)
print(m1 * 1024)
print(m2 * 1024)
print(m3 * 1024)
print(m4 * 1024)

我得到了以下结果:

23907.0
23907.0
23907.0
24515.0
24515.0

使用 Lua 5.3 和 OSX Mojave。

我很困惑为什么在调用 collectgarbage("count") 三次后内存使用量会增长。

谢谢。

点赞
用户5675002
用户5675002

运行 collectgarbage() 函数序列需要在全局环境的表中搜索该函数并将其与字符串参数一起推入堆栈中。 Lua 将 collectgarbage 报告推入虚拟机状态的堆栈中。

堆栈必须增长以容纳被放置在其中的新值,根据堆栈的当前容量,可能只有足够的空间允许所有这些操作被执行而无需重新分配堆栈,或者它将必须扩展堆栈,从而给出不同的内存大小报告。

尝试在创建表之后,第一个调用 collectgarbage("count") 函数之前的行中插入 print "grab stats"。 可能您根本看不到内存大小的变化。

2019-11-09 08:34:08
用户343123
用户343123

每次打印都将要打印的数转换为字符串。这些新字符串需要内存。

2019-11-09 13:16:41