Global:
Wherever the linker puts them. Typically the ?BSS segment? on many platforms.
Static:
Again, wherever the linker puts them. Often, they're intermixed with the globals. The
only difference between globals and statics is whether the linker will resolve the symbols across compilation units.
Local:
Typically on the stack, unless the variable gets register allocated and never spills.
Register:
Nowadays, these are equivalent to ?Local? variables. They live on the stack
unless they get register-allocated.