luabind通報::オブジェクト参照解除(簡体字)
-
20-09-2019 - |
質問
の 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グループから)かもしれません。
所属していません StackOverflow