1

C++lua5.1luabind 0.7を使用

ルアコード:

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

ありがとうございました。

4

1 に答える 1

2

使用しているコードが掲載されているとおりであれば、Lua スタックに参照がまだ残っていると思います。luabind::object の作成と lua_gc 呼び出しの間に lua_pop(l, 1) を挿入してみてください。

ちなみに、luabind の現在の安定版リリースは 0.8.1 で、0.9-rc もあります。現在のバージョンを使用している場合は、より多くの回答が得られる可能性があります (ここと luabind-users グループの両方から)

于 2009-12-20T11:19:53.273 に答える