C プログラムのメモリ レイアウトは、テキスト、ヒープ、スタック、データ、および bss セグメントに分割されていることを知っています。このメモリ レイアウトだけが、さまざまなストレージ クラスの変数のスコープと有効期間を維持する理由だと思います (よくわかりません)。
たとえば、auto 変数はスタックに格納されます。関数呼び出しが発生するたびに、呼び出された関数の自動変数へのアクセスを制限する新しいスタック フレームが作成されます。しかし、それらはまだ関連付けられたフレーム内にあり、呼び出された関数が制御を返すとすぐに動作を開始します。
したがって、自動変数のスコープと有効期間を正当化できます。しかし、そのようなスコープを維持するために、他のセグメント (つまり、データ、bss、およびヒープ) でどのデータ構造が使用されているかを知りたいです。それとも、スコープと寿命を制御するのはメモリ レイアウト以外の何かですか?