Skip to content

4.1.1 - 栈的大小

当你与Lua API交互,你负责确保一致性。特别说明,你有责任控制栈溢出。当你调用任意API函数时,你必须确保栈有足够的空间以容纳结果。

在上述规则中有个例外:当你调用一个结果数量不固定的Lua函数时(参见lua_call),Lua会确保栈有足够的空间以容纳所有结果。然而,其并不保证有任何额外的空间。所以在调用这样的函数之后,你应该在压栈前使用lua_checkstack检查栈空间。

当Lua调用C代码时,其确保栈中至少有 LUA_MINSTACK 宏定义大小的额外空间;即,你可以安全地压入 LUA_MINSTACK 个值到栈中。LUA_MINSTACK 的定义是20,所以通常你不必担心栈空间除非你在循环中压栈。如有必要,你可以使用lua_checkstack函数来确保栈中有足够的空间来压入值。