You are asking questions that have absolutely nothing to do with C++ and everything to do with a specific processor's architecture.
Further, unless you are doing something weird, accessing a global vs a local variable should, cache/architecture issues aside, not have a significant difference in access speed or "efficiency".
As for the CPU cache, it is not dependent on whether an object is on the stack or the heap, but whether the object (or one near it) was recently accessed, thus bringing the object into the cache.
As with all such questions, it is meaningless to consider them outside of a specific test profile. Always profile your program to determine where bottlenecks occur. It will almost never be simply accessing a variable. (Unless, again, you have done something weird.)