The stack holds local variables and call frames that last until their function returns, while the heap holds memory you allocate and free yourself.
The stack is automatic and fast. Each function call pushes a frame, and returning pops it. The compiler must know each frame's size up front, and the return frees that space at once.
The heap is flexible. You allocate a block, use it as long as you like, then free it yourself.
That flexibility has a cost. Heap allocation is slower, and the heap can fragment over time. Forget to free a block, and you leak memory.
Use the stack for short-lived, fixed-size data, and the heap when the size is unknown or the data must outlive the call.
This answer doesn't lend itself to a diagram - it reads best . No credits were charged.
Why there's no diagram: “”
The interactive diagram is below the answer - jump to diagram ↓ · Below it, the related concept . Jump to it ↓
The diagram below the answer is the concept . Jump to it ↓