iI don't quite have the same spin on this as Telastyn.
systemSystem globals in an embedded processor might be addressed with specific, hard-coded addresses.
globalsGlobals in a program will be addressed as an offset from a special pointer that points to the place in memory where globals and statics are stored.
localLocal variables appear when a function is entered and are addressed as an offset from another special pointer, often called the "frame pointer". this This includes the arguments to the function. if If you are careful about the pushes and pops with the stack pointer, you can do away with the frame pointer and access local variables straight from the stack pointer.
soSo you pay for the indirection of pointers whether you're striding through an array or just grabbing some unremarkable local or global variable. it's It's just based on a different pointer, depending on what kinda variable it is. code Code that is compiled well will keep that pointer in a CPU register, rather than reloading it each time it's used.