Lua and C are fundamentally different languages. They handle everything differently, such as memory management, types, and even function calls. This poses a problem when trying to integrate the two: how can we communicate between these two languages? This is where the Lua stack comes in.
The Lua stack is an abstract stack that sits between C and the Lua runtime. It's a Last In First Out (LIFO) stack. The idea is, both C and Lua know the rules of the stack and so long as they both obey the rules, they can coexist and communicate.
In general, you can think of the stack as a shared data storage mechanism. The way it normally works is that you push some values onto the stack in C. Then, you call a Lua function and hand control over to the Lua runtime. The runtime pops the values off the stack, and the function in question does its work and pushes the return value back...