尽管我通过调用尽可能少的时间修复了这个错误,但从lua_getglobal
长远来看还不够好。那么有谁知道我如何清理 lua 堆栈中的所有内容以防止内存管理问题?
---编辑---
从我刚刚做的实验中,lua_settop
将把表清理到给定的值。但是,当我知道要删除多少项目时,lua_pop
效率更高吗?
一个简单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;
}
这是人为的,因为如果foo
由 VM 调用,则不需要进行清理。但是,如果您有foo
直接调用 C++ 代码,这可能是必要的。无论如何,希望这能说明它的调用上下文。