我遇到了一个关于lua表使用的内存泄漏问题,以下是代码:
function workerProc()
-- a table holds some objects (userdata, the __gc is implememted correctly)
local objs = {createObj(), createObj(), ...}
while isWorking() do
-- ...
local query = {unpack(objs)}
repeat
-- ...
table.remove(query, queryIndex)
until #query == 0
sleep(1000)
end
end
表格
objs
是用一些用户数据对象初始化的,并且这些对象在while循环中始终可用,因此不会对这些objs执行垃圾回收。在while循环中,query
表格使用unpack函数从objs
中初始化所有元素。当运行脚本时,我发现内存不断增加,但是当我注释掉local query = {unpack(objs)}
后,内存消失了。我认为这段代码没有内存泄漏问题,因为
query
变量是局部变量,在每次while循环迭代之后应该无法访问,但事实并非如此。有人知道为什么内存被该表所吞噬吗?