Domanda

Utilizzando C ++ , lua5.1 , luabind 0.7

codice Lua:

-- allocates near 8Mb of memory
function fff()
    local t = {}
    for i = 1, 300000 do
        table.insert(t, i)
    end
    return t
end

codice C ++:

{
    luaL_dostring(lua_state, "return fff()");
    luabind::object obj(luabind::from_stack(ls, -1));
}
lua_gc(l_, LUA_GCCOLLECT, 0); // collect garbage

Risultato : Lua hanno ancora un 8Mb di memoria allocata. garbage collection ignora che oggetto tabella. Ha referenze da qualche parte? Ma dove? Quel tavolo rilascia solo all'uscita del programma (quando la funzione "lua_close" chiamato). Come risolvere questo problema?

Grazie.

È stato utile?

Soluzione

Se il codice si utilizza è esattamente come pubblicato, direi che c'è ancora un punto di riferimento nello stack Lua. Tenta di inserire un lua_pop (l, 1) tra la creazione luabind :: oggetto e la chiamata lua_gc.

Su un lato nota, la versione corrente stabile di luabind è 0.8.1, c'è 0,9-rc anche; si potrebbe ottenere più risposte se si stesse utilizzando una qualche versione corrente (sia qui che dal gruppo luabind-utenti)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top