0

プログラム内の静的変数は、サブプログラムの静的変数が (サブプログラムの呼び出しによって) 作成され、サブプログラムのアクティブ化レコードのプッシュによって行われる (サブプログラムの終了によって) 破棄される間、すべての実行時間にわたってメモリ内に存在します。プログラムの関数呼び出しスタックへのオンとオフのポップですが、次のようになります。

メイン プログラム内のブロック (つまり、制御構造または任意の {} ブロック) の静的変数はどうですか? それらは、定義されているブロックの外ではアクセスできません。メモリの概念はどのようになっていますか?

それらはプログラム実行全体でメモリ内に存在しますが、それらのブロックの外ではアクセスできませんか、またはサブプログラム以外のすべてのブロックにもアクティベーション レコードがありますか?

4

1 に答える 1

0

すべての場合の静的変数は、プログラムの存続期間中に一度割り当てられます。(あなたの質問の「サブプログラム」とは、C関数を意味すると思います。)あなたの質問は、使用中のプログラミング言語に固有のものであるため、Cを想定します.

静的変数を「見る」(または見ない) コード ブロックの機能は別のものであり、コンパイラの字句スコープ規則によって強制されるフィクションです。

特に C ではstatic、グローバル スコープ、関数スコープ、およびブロック スコープの変数はすべて、プログラムの存続期間中、プログラムごとに 1 回格納されます。次の例では、プログラムの開始時に (少なくとも) 3 つの単語が割り当てられます。

static int globalWord;

int aFunction(void) {
  static int aFunctionPrivateStatic;
} 

int main(void) {
   while (1) {
     static int whilePrivateStatic;
     // ...
   }

   // ...
}

詳細な例については、 http://en.wikipedia.org/wiki/Static_variableを参照してください。

于 2013-01-10T05:25:21.707 に答える