Problema con luabind :: oggetto dereferenziando (semplificato)
-
20-09-2019 - |
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.
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)