luabind::object解引用的问题(简化版)

使用C++lua5.1luabind 0.7

Lua 代码:

-- 分配近 8Mb 的内存
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); // 回收垃圾

结果:Lua 仍然有 8Mb 的内存分配。垃圾回收器忽略了该表对象。它有参考文献吗? 但是在哪里?只有在程序退出(调用"lua_close"函数时)时,该表才会释放内存。如何解决这个问题?

谢谢。

原文链接 https://stackoverflow.com/questions/1934238

点赞
stackoverflow用户169828
stackoverflow用户169828

如果你使用的代码与发布的完全一样,我认为在 Lua 堆栈中仍然存在一个引用。尝试在 luabind::object 创建和 lua_gc 调用之间插入 lua_pop(l, 1)。

另外,luabind 的当前稳定版本是 0.8.1,还有 0.9-rc 版本;如果你使用一些当前版本,无论是在这里还是在 luabind 用户组中,你可能会得到更多的答案。

2009-12-20 11:19:53