【发布时间】:2011-02-08 16:38:05
【问题描述】:
通常,在我定义的函数运行后,我会留下最多 6 个剩余条目的 Lua 堆栈。
在某些情况下,这会导致严重的内存泄漏/堆栈溢出!我在函数结束时使用 lua_settop( L, 0 ) 解决了它们。
在其他情况下,即使在我的函数结束时堆栈不是空的,也没有泄漏。
- 什么时候需要清理 Lua 堆栈?
- 堆栈中的某一时刻怎么会包含大约 10.000 个元素? (函数中根本没有使用循环)
【问题讨论】:
标签: lua
通常,在我定义的函数运行后,我会留下最多 6 个剩余条目的 Lua 堆栈。
在某些情况下,这会导致严重的内存泄漏/堆栈溢出!我在函数结束时使用 lua_settop( L, 0 ) 解决了它们。
在其他情况下,即使在我的函数结束时堆栈不是空的,也没有泄漏。
【问题讨论】:
标签: lua
当退出用 C 语言编写的 Lua 函数时,您不需要清理 Lua 堆栈,当然,前提是该函数是从 Lua 调用的。如果您遇到内存泄漏,请发布一个显示问题的最小示例。如果堆栈有 10000 个条目,请确保您已调用 lua_checkstack 或 luaL_checkstack。
【讨论】:
void lua_pop (lua_State *L, int n);
/*Pops n elements from the stack.*/
至于为什么 - 不能说清楚 - 有很多可能的原因,你能发布一些导致这种情况的代码示例吗?以下是一些常见的(恕我直言)原因。
Lua 不会导致任何内存泄漏,除非您使用轻量级用户数据(唯一不受垃圾收集器管理的用户数据)。
你有没有 malloc 任何东西而不是使用 lua_newuserdata?
您是否在函数开始时检查过堆栈大小?也许你刚刚从 Lua 传递了那么多参数(例如调用 c_func(unpack(huge_table)); )?
【讨论】: