luabind :: object dereferencing(简化)问题

时间:2009-12-19 21:46:06

标签: c++ reference garbage-collection lua luabind

使用 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”函数时)。如何解决这个问题?

谢谢。

1 个答案:

答案 0 :(得分:2)

如果您使用的代码与发布的完全相同,我会说Lua堆栈中仍然存在引用。尝试在luabind :: object creation和lua_gc调用之间插入lua_pop(l,1)。

另一方面,目前luabind的稳定释放量为0.8.1,也是0.9-rc;如果你使用的是当前版本(在这里和来自luabind-users组),你可能会得到更多的答案