Frage

Mit C ++ , lua5.1 , luabind 0.7

Lua Code:

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

C ++ Code:

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

Ergebnis : Lua hat noch ein 8 MB Speicher zugewiesen. Garbage Collection ignoriert, dass das Tabellenobjekt. Es verfügt über Referenzen überall? Aber wo? Diese Tabelle freigibt nur beim Beenden des Programms (wenn „lua_close“ Funktion genannt). Wie dieses Problem zu lösen?

Danke.

War es hilfreich?

Lösung

Wenn der Code, den Sie verwenden, um genau wie geschrieben, würde ich sagen, dass es immer noch eine Referenz in dem Lua-Stack. Versuchen, eine lua_pop einzufügen (l, 1) zwischen der luabind :: Objekterzeugung und dem lua_gc Anruf.

Auf einer Seite zur Kenntnis, die aktuelle stabile Version von luabind ist 0.8.1, gibt es 0,9-rc auch; Sie könnten mehr Antworten bekommen, wenn Sie einige aktuelle Version verwendet wurden (sowohl hier als auch von der luabind-Benutzergruppe)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top