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!

questionAnswers(5)

yourAnswerToTheQuestion