Mam pytanie o następującym kodzie C:Kiedy jest miejsce na stosie przydzielone dla zmiennych lokalnych?
void my_function()
{
int i1;
int j1;
// Do something...
if (check_something())
{
int i2;
int j2;
// Do something else...
}
// Do some more stuff...
}
Czy istnieją jakieś zagwarantować, kiedy przestrzeń stosu jest przydzielona/przydziałów dla i2 i J2, czy też zależy od kompilatora? Spodziewam się, że wskaźnik stosu zostanie skorygowany, gdy i2 i j2 wejdą w zakres i skorygują kopie zapasowe, gdy wyjdą poza zasięg, ale wtedy myślę, że niektóre kompilatory mogą po prostu "zoptymalizować" całą rzecz i uwzględnić zmienne w zakresie zagnieżdżonym, gdy funkcja jest najpierw wprowadzana.
Wiem, że mogę spojrzeć na kod generowany przez mój kompilator, ale zastanawiałem się, czy implementację można pozostawić kompilatorowi.
Dzięki!
Weź również pod uwagę, że zmienne mogą być przypisane do rejestrów ... – unwind