スタックとその仕組みを知っています。すべての関数がメモリ内に独自のスタックを割り当てていることも知っています。 しかし、私を混乱させることは、コンパイラがこれらの名前がこのスコープで宣言されていることがわかる方法です。指定された名前のエントリが存在する場合には、スタック全体をチェックしを繰り広げるん(それは排気らしい) このコードを考えてみます。コンパイラはどのようにスコープを解決しますか?
void func(int a)
{
cout<<a;
cout<<b;
}
ここでFUNCのスタックがのためのエントリが含まれているが、ときますコンパイラは名前bに出会うとスタックをチェックし、bのエントリがないことを知ります。今質問はそれがどのようにチェックされるのですか?スタック全体を展開しますか? とこの関数がbを含む別の関数の中で宣言されている場合、ほかのスタックもすべて展開する必要があります。
この関数には独自のスタックが割り当てられていません。この関数は、プロセススタック上にスタックフレームを割り当てます。これはコンパイル時ではなく、実行時に発生します。以下の回答に記載されているように、コンパイラは、スコープの問題を解決するために、シンボルテーブルの階層(またはその論理的同等物)を使用します。 –