Quem disse que o compilador reservará qualquer espaço (poderia ser apenas um registro).
Isso é completamente indefinido.
Tudo o que você pode dizer é que ( x
) só pode ser acessado de dentro do bloco interno.
A maneira como o compilador aloca memória (em uma pilha, se existir) é totalmente dependente do compilador (como a região da memória pode ser reutilizada para vários objetos (se o compilador puder provar que sua vida útil não se sobrepõe)).
É o espaço para x reservado na pilha imediatamente quando func é inserido
Indeterminado.
ou apenas se o bloco for realmente executado?
Indeterminado.
Mas se x
era um objeto de classe, o construtor só será executado se o bloco for inserido.
Ou é a escolha do compilador?
O compilador pode nem mesmo alocar memória.
C e C ++ se comportam da mesma maneira sobre isso?
sim