I'd expect a modern compiler to create the same code for both cases.
The only difference is that one is an evil global, and one isn't.
What makes you expect that? Just a random guess? Did you actually ever check the assembly generated?
I bet every time you call getInstance(), the compiler inserts an if() check to see if the singleton has been constructed yet, since it's a function-local static variable. That's a *lot* of extra runtime checks for something that will only branch once. If getInstance() gets inlined all over the place, that's a lot of extra code (in bytes), too.