Problema com Luabind :: Objeto Dereferencing (simplificado)
-
20-09-2019 - |
Pergunta
Usando C ++, Lua5.1, Luabind 0.7
Código Lua:
-- allocates near 8Mb of memory
function fff()
local t = {}
for i = 1, 300000 do
table.insert(t, i)
end
return t
end
Código C ++:
{
luaL_dostring(lua_state, "return fff()");
luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l_, LUA_GCCOLLECT, 0); // collect garbage
Resultado: Lua ainda tem uma memória alocada de 8 MB. A coleta de lixo ignora esse objeto de tabela. Tem referências em algum lugar? Mas onde? Essa tabela é negociada apenas na saída do programa (quando a função "lua_close" chamada). Como resolver este problema?
Obrigada.
Solução
Se o código que você usa for exatamente como publicado, eu diria que ainda há uma referência na pilha Lua. Tente inserir um lua_pop (l, 1) entre a criação de objeto Luabind :: e a chamada Lua_GC.
Em uma nota lateral, a versão estável atual de Luabind é 0,8,1, também há 0,9-rc; Você pode obter mais respostas se estivesse usando alguma versão atual (aqui e do grupo Luabind-Users)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow