質問

C ++ ののlua5.1のを使用し、

0.7 luabind

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はまだ8Mバイト割り当てられたメモリを持っています。ガベージコレクションは、そのテーブルオブジェクトを無視します。それはどこにでも参照を持っていますか?しかしここで?そのテーブルにのみ(「lua_close」関数が呼び出さ)プログラムの終了に割り当てを解除します。この問題を解決する方法?

をいただき、ありがとうございます。

役に立ちましたか?

解決

あなたが使用しているコードを正確に掲載されている場合、

、私はLuaのスタック内の参照がまだあるかなと思います。 luabind ::オブジェクトの作成とlua_gcコールの間lua_pop(L、1)を挿入してみてください。

サイドノートでは、luabindの現在の安定版リリースは0.8.1で、また0.9-rcがあります。あなたは、いくつかの現在のバージョンを使用していた場合はより多くの回答を得る(両方ともこことluabind-usersグループから)かもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top