1

C プログラムのメモリ レイアウトは、テキスト、ヒープ、スタック、データ、および bss セグメントに分割されていることを知っています。このメモリ レイアウトだけが、さまざまなストレージ クラスの変数のスコープと有効期間を維持する理由だと思います (よくわかりません)。

たとえば、auto 変数はスタックに格納されます。関数呼び出しが発生するたびに、呼び出された関数の自動変数へのアクセスを制限する新しいスタック フレームが作成されます。しかし、それらはまだ関連付けられたフレーム内にあり、呼び出された関数が制御を返すとすぐに動作を開始します。

したがって、自動変数のスコープと有効期間を正当化できます。しかし、そのようなスコープを維持するために、他のセグメント (つまり、データ、bss、およびヒープ) でどのデータ構造が使用されているかを知りたいです。それとも、スコープと寿命を制御するのはメモリ レイアウト以外の何かですか?

4

2 に答える 2

2

原因と結果を混同しているようです。変数のスコープと有効期間は、言語標準によって決まります。実装では、標準が満たされていることを確認する必要があります。特定のプラットフォームで便利なメモリ レイアウトを使用する場合がありますが、その必要はありません。

セグメントをテキストまたは bbs として使用するメモリ レイアウトは、基本的には実行形式の問題であり、言語の問題ではありません。

于 2013-04-30T05:26:20.417 に答える