Проблема с luabind :: разыменованием объектов (упрощено) - PullRequest
1 голос
/ 20 декабря 2009

Использование C ++ , lua5.1 , luabind 0.7

Код Lua:

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

C ++ код:

{
    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"). Как решить эту проблему?

Спасибо.

1 Ответ

2 голосов
/ 20 декабря 2009

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

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

...