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!