为什么 Lua C 函数中的参数值显示在堆栈底部?

Why do parameter values in Lua C functions show up at the bottom of the stack?

以 lua 的简单 C 函数为例:

int luacfunc(lua_State *L)
{
    printf("%g\n", lua_tonumber(L, 1) + lua_tonumber(L, 2));
}

在这种情况下,参数显示为索引 12。由于正数表示堆栈自下而上,这意味着参数位于堆栈的底部,而不是顶部。

为什么会这样?难道不需要在每次函数调用时移动整个堆栈来为参数腾出空间吗?

Lua 堆栈特定于您的函数调用。每个 C 函数调用都有自己的 "stack"(它实际上是更大堆栈的一部分,但对您是隐藏的)。你的论点既在顶部又在底部,因为它们是你堆栈中唯一的东西。