Quién dijo que el compilador reservará cualquier espacio (solo puede registrarse).
Esto es completamente indefinido.
Todo lo que puede decir es que x
solo se puede acceder a él ( ) desde el interior del bloque interno.
La forma en que el compilador asigna memoria (en una pila, si es que existe) depende completamente del compilador (ya que la región de memoria puede reutilizarse para múltiples objetos (si el compilador puede probar que sus vidas no se superponen)).
Es el espacio para x reservado en la pila inmediatamente cuando se ingresa func
Indeterminado.
o solo si el bloque se ejecuta realmente?
Indeterminado.
Pero si x
se tratara de un objeto de clase, el constructor solo se ejecutará si se ingresa el bloque.
¿O es la elección del compilador?
Es posible que el compilador ni siquiera asigne memoria.
¿C y C ++ se comportan igual sobre esto?
si