У меня есть проблема утечки памяти об использовании Lua таблицы, код ниже: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
инициализируется с некоторыми объектами USERDATA и эти объекты всегда доступны в цикле пока так не дс будет выполненных на этих объектах. В цикле while таблица query
инициализируется всеми элементами из objs
(используйте функцию распаковки). Во время запуска скрипта я обнаружил, что память продолжает расти, но когда я прокомментирую local query = {unpack(objs)}
, она исчезает.
Я не думаю, что этот кусок кода имеет проблему с утечкой памяти, так как параметр query
var является локальным, и он должен быть недоступен после каждой итерации цикла while, но факт есть. Кто-нибудь знает, почему память проглочена этим столом?
Спасибо! Я думаю, что лучший способ - переместить таблицу запросов из внутреннего цикла. – Kery