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.

Foi útil?

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
scroll top