Kiedy przydzielana jest przestrzeń stosu dla zmiennych lokalnych?

Mam pytanie dotyczące następującego kodu C:

void my_function()
{
    int i1;
    int j1;

    // Do something...

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

        // Do something else...
    }

    // Do some more stuff...
}

Czy są jakieś gwarancje dotyczące tego, kiedy przestrzeń stosu jest przydzielana / zwalniana dla i2 i j2, czy też zależy od kompilatora? Spodziewałbym się, że wskaźnik stosu zostanie skorygowany w dół, gdy i2 i j2 wejdą w zakres i poprawią się, gdy wyjdą poza zakres, ale potem pomyślał, że niektóre kompilatory mogą po prostu „zoptymalizować” całość i uwzględnić zmienne w zagnieżdżonym zakresie, funkcja zostanie wprowadzona po raz pierwszy.

Wiem, że mogę spojrzeć na kod zespołu wygenerowany przez mój kompilator, ale zastanawiałem się, czy implementację można pozostawić kompilatorowi.

Dzięki!

questionAnswers(5)

yourAnswerToTheQuestion