2

尽管我通过调用尽可能少的时间修复了这个错误,但从lua_getglobal长远来看还不够好。那么有谁知道我如何清理 lua 堆栈中的所有内容以防止内存管理问题?

---编辑---
从我刚刚做的实验中,lua_settop将把表清理到给定的值。但是,当我知道要删除多少项目时,lua_pop效率更高吗?

4

1 回答 1

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;
}

这是人为的,因为如果foo由 VM 调用,则不需要进行清理。但是,如果您有foo直接调用 C++ 代码,这可能是必要的。无论如何,希望这能说明它的调用上下文。

于 2013-11-11T01:35:28.303 回答