0

staticキーワードは内部でどのように機能しますか? 基本定義 を考慮して、または時間 は実行フローの観点からそれをstatic variable is initialized only onceどのように解釈しますか? コード スニペットを検討してください。run-timecompile

void function()
   {
      static int count=0;
      count++;
   }
main()
    {
       for(int i=0;i<=10;i++)
          function();
    }

この行 static int count=0;は 1 回だけ実行され、その繰り返しi=0が私が思いつく最良の説明です。それは正しいですか、それとも他の方法で機能しますか?

そして、メモリ内のどこに静的変数が格納されていますstackheap?

また、何か呼ばれるものはありstatic objectますObjective-Cか?あるとしたら普通の物とどう違うの?

4

2 に答える 2

5

最後の質問はstatic、ローカル変数宣言でが使用されている場合について質問していることを示唆しています。

staticキーワードは内部でどのように機能しますか?

これは実装固有です。

これは、割り当てられているメモリと関係がありますか?

はい、と宣言されたローカルはstatic静的ストレージに常駐します。

コンパイラ/ランタイムは、最初の遭遇後にそれをスキップしますか?

初期化を1回だけ実行するのはランタイムです。static特に明記されていない限り、ローカルは値で初期化されます。

于 2012-08-24T13:16:56.567 に答える
2

これは、コンパイラと、メモリがどこにあるかに応じてメモリが割り当てられる方法にとって、何かを意味します。関数内では、変数はスタックに割り当てられ、関数の存続期間中存続し、値は呼び出し間で保持されません。宣言を使用するstaticと、変数はグローバルが割り当てられる場所 (通常は .bss) に割り当てられ、値は関数呼び出し間で保持されますが、変数のスコープはその関数のみになります。

static関数外のグローバル宣言に が使用される場合、変数はそのモジュール内でのみスコープを持ちます。つまり、module1.cpp で静的変数を宣言すると、module2.cpp は extern でアクセスできません。

于 2012-08-24T13:18:56.103 に答える