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 回答