Ich weiß, was Stapel und wie sie arbeiten. Ich weiß auch, dass jede Funktion einen eigenen Stapel im Speicher zugeordnet ist, und das ist, was den Anwendungsbereich macht. aber die Sache, die mich verwirrt, ist, wie der Compiler herausfindet, dass diese Namen in diesem Bereich deklariert sind. tut es den ganzen Stapel und überprüft, entfaltet sich, wenn es einen Eintrag für den Namen gegeben ist (es scheint anstrengend) diesen Code betrachten.Wie der Compiler den Bereich auflöst?
void func(int a)
{
cout<<a;
cout<<b;
}
hier Stapel von func für ein enthalten Eintrag wird aber, wenn Compiler begegnet dem Namen b es überprüft den Stack und findet heraus, dass es keinen Eintrag für b gibt. Jetzt stellt sich die Frage, wie es prüft, entfaltet es den ganzen Stapel. und Was ist, wenn diese Funktion innerhalb einer anderen Funktion deklariert ist, die b enthält, muss sie auch alle anderen Stapel entfalten?
Die Funktion hat keinen eigenen Stack. Die Funktion weist dem Prozessstapel einen Stapelrahmen zu. Dies geschieht zur Laufzeit, nicht zur Kompilierzeit. Wie in der Antwort unten erwähnt, verwendet der Compiler eine Hierarchie von Symboltabellen (oder deren logische Entsprechung), um Umfangsprobleme zu lösen. –