如何从C ++中清除lua堆栈中的所有内容?

时间:2013-11-11 01:33:11

标签: c++ lua

虽然我通过电话将错误修复为尽可能少的时间lua_getglobal,但这对于长期来说还不够好。那么有谁知道如何清理lua堆栈中的所有内容以防止内存管理问题?

--- --- EDIT
从我刚刚进行的实验中,lua_settop将表格清理为给定值。但是,在我知道有多少项目要移除的时候,lua_pop更有效率了吗?

1 个答案:

答案 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 ++代码,则可能需要这样做。无论如何,希望这说明了它的呼唤背景。