Backend
Backend Essentials
Stack Memory

Stack Memory

When an Operating System provisions memory for an active Process, one of the most critical segments created is the Stack Memory. In backend engineering, understanding the Stack is essential for preventing recursive crashes and understanding how synchronous code executes.

What is the Stack Used For?

The Stack has three primary responsibilities:

  1. Function Calls (The Call Stack): Every time a function is invoked, a new "frame" is pushed onto the Stack. This frame tells the CPU exactly where to return once the function finishes executing.
  2. Local Variables: Any primitive variables (like numbers, strings, and booleans) declared inside a function are stored directly in the Stack.
  3. Execution Tracking: Because it is a LIFO (Last-In-First-Out) structure, it acts as a breadcrumb trail, tracking exactly which function called which other function.

Characteristics of the Stack

  • Extremely Fast: Memory is allocated and de-allocated by simply moving a pointer up and down. There is no complex searching involved.
  • Small Size: The OS heavily limits the size of the Stack (often just a few megabytes per process).
  • Automatically Managed: You do not have to write code to clean up the Stack. The moment a function finishes executing, its entire frame (and all its local variables) is instantly "popped" off the Stack and destroyed.

Code Example: How the Stack Works

Consider the following simple Node.js code:

function add() {
   let x = 10;
   return x + 5;
}
 
add();

What happens in the Stack?

  1. You call add().
  2. The OS pushes a new frame for add() onto the Stack.
  3. The primitive variable let x = 10; is created and placed directly into the Stack memory inside that frame.
  4. The function returns 15.
  5. The add() frame is instantly popped off the Stack. The variable x is immediately destroyed.

[!WARNING] Stack Overflow: Because the Stack is very small, if you write a recursive function that never stops calling itself, it will push millions of frames onto the Stack. Once the OS limit is reached, your Node.js application will fatally crash with a RangeError: Maximum call stack size exceeded.