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

The*_*ang 2 c lua stack virtual-machine

以lua的简单C函数为例:

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

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

为什么会这样?它是否需要在每个函数调用上移动整个堆栈以为参数腾出空间?

use*_*751 5

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