如何清理我的lua状态堆栈?

Ore*_*ren 5 c c++ lua

我使用lua C-API读取存储在lua文件中的配置数据.

我在文件中有一个漂亮的小表,我编写了一个查询C函数来解析表中的特定字段.(它的确有效!)

它通过一遍又一遍地调用这些函数中的一些来工作:

... 
lua_getglobal (...); 
lua_pushinteger (...); 
lua_gettable (...); 
lua_pushstring (...); 
lua_gettable (...); 
lua_lua_getfield (...);
...
Run Code Online (Sandbox Code Playgroud)

你明白了.

在我查询完这样的数据之后,我是否必须清理堆栈?

Nor*_*sey 6

只要你的筹码不会无限制地增长,你就没事了.当您将C API中的整数N返回到Lua时,会发生两件事:

  • Lua引擎从堆栈中获取前N个值,并将它们视为调用的结果.

  • Lua引擎释放(并重用)堆栈中的其他所有内容.

David Seiler提到了从其他C代码而不是从Lua引擎调用C代码的可能性.这是一种先进的技术,如果您提出这个问题,您不必担心该特定问题.(但是从Lua的角度来看它发生的方式是一样的 - 当所有 C代码完成执行时,它必须返回一个整数,并且Lua从堆栈中剥离掉许多值,然后释放其余的值.)

如果您使用太多的堆栈插槽,您的程序将停止使用理智且明智的错误消息(据我所知).