Когда пространство стека выделяется для локальных переменных?

У меня есть вопрос по поводу следующего кода C:

void my_function()
{
    int i1;
    int j1;

    // Do something...

    if (check_something())
    {
        int i2;
        int j2;

        // Do something else...
    }

    // Do some more stuff...
}

Существуют ли какие-либо гарантии относительно того, когда пространство стека выделено / освобождено для i2 и j2, или это зависит от компилятора? Я ожидал бы, что указатель стека будет уменьшен, когда i2 и j2 войдут в область видимости, и отрегулирован обратно, когда они выйдут из области видимости, но потом подумал, что некоторые компиляторы могут просто "оптимизировать» все это и учет переменных во вложенной области видимости при первом входе в функцию.

Я знаю, что могу посмотреть на ассемблерный код, сгенерированный моим компилятором, но мне было интересно, можно ли оставить реализацию на усмотрение компилятора.

Спасибо!

Ответы на вопрос(5)

Ваш ответ на вопрос