使用的 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用户组)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top