虽然我尽可能少地通过电话来修复错误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;
}
Run Code Online (Sandbox Code Playgroud)
这是设计的,因为如果foo由VM调用,则不需要清理.但是如果你foo直接调用C++代码,这可能是必要的.无论如何,希望这说明了它的呼唤背景.
| 归档时间: |
|
| 查看次数: |
2463 次 |
| 最近记录: |