Проблема с разыменованием luabind::object (упрощенно)
-
20-09-2019 - |
Вопрос
С использованием С++, lua5.1, луабинд 0,7
Луа-код:
-- allocates near 8Mb of memory
function fff()
local t = {}
for i = 1, 300000 do
table.insert(t, i)
end
return t
end
Код С++:
{
luaL_dostring(lua_state, "return fff()");
luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l_, LUA_GCCOLLECT, 0); // collect garbage
Результат:Lua по-прежнему имеет выделенную память 8 МБ.Сборка мусора игнорирует этот объект таблицы.Где-нибудь есть ссылки?Но где?Эта таблица освобождается только при выходе из программы (при вызове функции «lua_close»).Как решить эту проблему?
Спасибо.
Решение
Если используемый вами код точно такой, как опубликовано, я бы сказал, что в стеке Lua все еще есть ссылка.Попробуйте вставить lua_pop(l, 1) между созданием объекта luabind::object и вызовом lua_gc.
Кстати, текущая стабильная версия luabind — 0.8.1, также есть 0.9-rc;вы могли бы получить больше ответов, если бы использовали какую-либо текущую версию (как здесь, так и в группе luabind-users)
Не связан с StackOverflow