Both hold your program's data, but they behave very differently. The stack stores local variables and function call frames. The heap stores memory you request explicitly and control by hand.
The stack is automatic and fast. Each function call pushes a frame; returning pops it. Sizes must be known up front, and the space is freed the instant the function returns. The heap is flexible. You allocate a block, use it as long as you like, then free it yourself.
That flexibility carries a cost. Heap allocation is slower and can fragment over time. Forget to free, and you leak memory. Use the stack for short-lived, fixed-size data, and the heap when size or lifetime outlives one function 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 ↓