虽然我通过电话将错误修复为尽可能少的时间lua_getglobal
,但这对于长期来说还不够好。那么有谁知道如何清理lua堆栈中的所有内容以防止内存管理问题?
--- --- EDIT
从我刚刚进行的实验中,lua_settop
将表格清理为给定值。但是,在我知道有多少项目要移除的时候,lua_pop
更有效率了吗?
答案 0 :(得分:5)
一个简单的lua_settop(L, 0);
应该可以解决问题。
一个简单的,虽然有点狡猾的例子说你有一个lua_CFunction
:
int foo(lua_State *L)
{
// marshal some random data
int bar = luaL_checknumber(L, 1);
const char *baz = luaL_checkstring(L, 2);
// do foo's task
// completely clear the stack before return
lua_settop(L, 0);
return 0;
}
这是设计的,因为如果VM调用foo
,则无需进行清理。但是如果您直接调用foo
C ++代码,则可能需要这样做。无论如何,希望这说明了它的呼唤背景。