我正在使用 lua C-API 读取存储在 lua 文件中的配置数据。
我在文件中有一个漂亮的小表,我编写了一个查询 C 函数来解析表中的特定字段。 (是的,它有效!)
它通过一遍又一遍地调用其中一些函数来工作:
...
lua_getglobal (...);
lua_pushinteger (...);
lua_gettable (...);
lua_pushstring (...);
lua_gettable (...);
lua_lua_getfield (...);
...
你明白了。
像这样查询完数据后,是否必须清理堆栈?
最佳答案
只要您的堆栈不会无限制地增长,就可以了。当您从 C API 向 Lua 返回整数 N 时,会发生两件事:
Lua 引擎从堆栈中取出顶部的 N 个值并将它们视为调用的结果。
Lua 引擎释放(并重用)堆栈上的所有其他内容。
David Seiler 提到您的 C 代码可能被其他 C 代码而不是 Lua 引擎调用。这是一项先进的技术,如果您问这个问题,您不太可能需要担心那个特定的问题。 (但从 Lua 的角度来看,它发生的方式是相同的——当 所有 C 代码执行完毕时,它必须返回一个整数,Lua 从堆栈中剥离那么多的值,然后释放其余的值。 )
如果您使用太多堆栈槽,您的程序将停止并显示一条理智且合理的错误消息(根据我的经验)。
关于c++ - 我如何清理我的 lua 状态堆栈?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2292294/