Chi ha detto che il compilatore riserverà qualsiasi spazio (potrebbe essere registrato solo).
Questo è completamente indefinito.
Tutto ciò che puoi dire è che ( x
) è accessibile solo dall'interno del blocco interno.
Il modo in cui il compilatore alloca la memoria (su uno stack, se esiste anche) è completamente in cima al compilatore (dato che l'area di memoria può essere riutilizzata per più oggetti (se il compilatore può dimostrare che la loro durata non si sovrappone)).
Is the space for x reserved on the stack immediately when func is entered
Non definito.
or only if the block is actually executed?
Non definito.
Ma se x
era un oggetto di classe, il costruttore verrà eseguito solo se viene inserito il blocco.
Or is it the compiler's choice?
Il compilatore non può nemmeno allocare memoria.
Do C and C++ behave the same about this?
Si