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

标签 c++ c lua

我正在使用 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/

相关文章:

c - 在简单的 C 程序中遇到问题

在每个数据字段中复制一个数组到链表

Lua 中的结构体?

ios - 电晕图像在模拟器中缩放但不在设备上缩放

c++ - 使用 Module32First/Next 从 64 位进程枚举 32 位进程模块

c++ - 两个其他方面相同的功能(一个使用模板模式,另一个不使用)

c++ - 撤消打印到命令行的换行符 (\n)

c - 重复使用客户端TCP套接字进行多个HTTP连接

NGINX LUA 内容长度 +1 字节丢失

c++ - Eclipse CDT + MinGW + GLEW,键入对 `LoadShaders(char const*, char const*)' 的 undefined reference