How Programs Use Memory: Addresses, the Stack, the Heap and Return Addresses
Once a program is loaded into memory, the CPU runs it by following an address that says where it is now; each function call leaves a return address on the stack, a note saying where to go back to. A small C program that prints addresses lets you check this yourself.