Ich habe eine Frage zu folgendem C-Code:Wann ist Stack-Speicherplatz für lokale Variablen reserviert?
void my_function()
{
int i1;
int j1;
// Do something...
if (check_something())
{
int i2;
int j2;
// Do something else...
}
// Do some more stuff...
}
Gibt es irgendwelche Garantien, wenn Stapelspeicher zugeordnet/freigegeben für i2 und j2 oder auf dem Compiler abhängt? Ich würde erwarten, dass der Stack-Pointer nach unten korrigiert wird, wenn i2 und j2 in den Gültigkeitsbereich kommen und wieder angepasst werden, wenn sie den Gültigkeitsbereich verlassen, aber dann dachten einige Compiler, das Ganze "zu optimieren" und Variablen in einem verschachtelten Scope zu berücksichtigen Die Funktion wird zuerst eingegeben.
Ich weiß, ich kann den von meinem Compiler generierten Assembler-Code betrachten, habe mich aber gefragt, ob die Implementierung dem Compiler überlassen werden kann.
Danke!
Beachten Sie auch, dass Variablen Registern zugeordnet werden können ... – unwind