To simplify just a bit, there are basically three main storage areas you need to be concerned with:
Global data -- a single static memory location outside the stack or heap. These are the variables declared not local to any function. (The distinction evident by the C/C++ "static" keyword is really just about which parts of the program are aware of the name of a global variable.)
Stack data -- dynamic, but pushes and pops with function calls.
Heap data -- the stuff returned by new/malloc, truly dynamic and the memory persists until a delete/free, rather than when functions exit.