问题luabind ::对象解除引用(简化的)
-
20-09-2019 - |
题
使用的 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中仍然有8Mb的分配的内存。垃圾收集忽略表对象。它的任何地方有介绍信吗?但是哪里?这table释放仅在程序退出时(称为“lua_close”功能)。如何解决这个问题呢?
<强>谢谢。强>
解决方案
如果您使用的代码是完全一样的贴,我说还是有在Lua中栈的参考。尝试插入luabind ::对象的创建和lua_gc调用之间的调用lua_pop(1,1)。
在一个方面说明,luabind的当前的稳定版本是0.8.1,有0.9-RC也;如果你使用一些当前版本你可能会得到更多的答案(都在这里,从luabind用户组)
不隶属于 StackOverflow