使用 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的内存分配。垃圾收集忽略该表对象。它有参考吗?但是哪里?该表仅在程序退出时释放(当调用“lua_close”函数时)。如何解决这个问题?
谢谢。
答案 0 :(得分:2)
如果您使用的代码与发布的完全相同,我会说Lua堆栈中仍然存在引用。尝试在luabind :: object creation和lua_gc调用之间插入lua_pop(l,1)。
另一方面,目前luabind的稳定释放量为0.8.1,也是0.9-rc;如果你使用的是当前版本(在这里和来自luabind-users组),你可能会得到更多的答案