Quando o espaço de pilha é alocado para variáveis locais?
Eu tenho uma pergunta sobre o seguinte código C:
void my_function()
{
int i1;
int j1;
// Do something...
if (check_something())
{
int i2;
int j2;
// Do something else...
}
// Do some more stuff...
}
Há alguma garantia sobre quando o espaço de pilha é alocado / desalocado para i2 e j2 ou depende do compilador? Eu esperaria que o ponteiro da pilha fosse ajustado para baixo quando i2 e j2 entrassem no escopo e se ajustassem quando eles saíssem do escopo, mas então alguns compiladores poderiam apenas "otimizar" a coisa toda e considerar as variáveis em um escopo aninhado quando a função é inserida primeiro.
Eu sei que posso olhar para o código assembly gerado pelo meu compilador, mas queria saber se a implementação pode ser deixada para o compilador.
Obrigado!