Вопрос

С использованием С++, lua5.1, луабинд 0,7

Луа-код:

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

Код С++:

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

Результат:Lua по-прежнему имеет выделенную память 8 МБ.Сборка мусора игнорирует этот объект таблицы.Где-нибудь есть ссылки?Но где?Эта таблица освобождается только при выходе из программы (при вызове функции «lua_close»).Как решить эту проблему?

Спасибо.

Это было полезно?

Решение

Если используемый вами код точно такой, как опубликовано, я бы сказал, что в стеке Lua все еще есть ссылка.Попробуйте вставить lua_pop(l, 1) между созданием объекта luabind::object и вызовом lua_gc.

Кстати, текущая стабильная версия luabind — 0.8.1, также есть 0.9-rc;вы могли бы получить больше ответов, если бы использовали какую-либо текущую версию (как здесь, так и в группе luabind-users)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top