我如何释放lua堆栈?
解决方法@H_301_4@
为什么要这样做?
如果你需要删除Lua栈中的所有元素,你应该调用lua_settop(L,0).引用manual:
void lua_settop (lua_State *L,int index);
Accepts any acceptable index,or 0,and sets the stack top to this index. If the new top is larger than the old one,then the new elements are filled with nil. If index is 0,then all stack elements are removed.
这将使堆栈中的所有元素都进行垃圾回收.之后调用lua_gc(LUA_GC_COLLECT)进行垃圾收集.如果您真的需要收集所有可收集的垃圾,请在循环中调用它,直到lua_gc(LUA_GCCOUNT)返回的值保持不变.
请注意,(AFAIK)您不能释放空间,分配给堆栈本身 – 除非您调用lua_close().
如果你需要删除Lua栈中的所有元素,你应该调用lua_settop(L,0).引用manual:
void lua_settop (lua_State *L,int index);
Accepts any acceptable index,or 0,and sets the stack top to this index. If the new top is larger than the old one,then the new elements are filled with nil. If index is 0,then all stack elements are removed.
这将使堆栈中的所有元素都进行垃圾回收.之后调用lua_gc(LUA_GC_COLLECT)进行垃圾收集.如果您真的需要收集所有可收集的垃圾,请在循环中调用它,直到lua_gc(LUA_GCCOUNT)返回的值保持不变.
请注意,(AFAIK)您不能释放空间,分配给堆栈本身 – 除非您调用lua_close().