通常,在运行我定义的函数后,我会让 Lua 堆栈变得困惑,最多留下 6 个剩余条目。
在某些情况下,这会导致严重的内存泄漏/堆栈溢出!我通过在函数末尾使用 lua_settop( L, 0 ) 解决了它们。
在其他情况下,即使函数结束时堆栈不为空,也没有泄漏。
- 什么时候需要清理 Lua 堆栈?
- 堆栈中怎么可能同时包含大约 10,000 个元素? (函数中根本没有使用循环)
最佳答案
当然,退出用 C 编写的 Lua 函数时,不需要清理 Lua 堆栈,前提是该函数是从 Lua 调用的。如果您遇到内存泄漏,请发布一个显示问题的最小示例。如果堆栈有 10000 个条目,请确保您已调用 lua_checkstack或luaL_checkstack .
关于Lua堆栈清理(C API),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4935678/