As Sourav Ghosh says, "Nothing you can be certain of!", however, let me give some possibilities a compiler might use.
First, syntactically speaking, a variable in a block only is known within the block. Outside the block the compiler (language) has forgotten all about it. So you can use this block construct to have a temporary variable.
What can the compiler do?
Probably a compiler will calculate the maximum storage of all blocks (that is, the automatic variables declared upon function entry (function scope) plus the size of the largest block, plus the size of the largest nested block,... etc.) and allocate that amount on the stack. When a block is exited, the compiler knows its variables do not exist anymore and can re-use that space (on the stack) for any following block. In Fortran this is called an overlay and it is comparible to a union in C.
Equally posible, a compiler might allocate new space on the stack (e.g. sub sp, 12
) upon entering a block, and release it upon leaving the block (e.g. add sp, 12
).
And there may be other strategies that I don't know of.