2013-07-27 12 views
5

volatile変数がメモリに格納されている場所を知ることはできますか?揮発性変数はどこに格納されていますか?

  1. グローバルに宣言すれば、どこにメモリに格納されますか?

    volatile int a =10; 
    int main() 
    { 
        printf("Global A value=%d",a); 
        return 0; 
    } 
    
  2. 関数内でローカルに宣言すると、どこにメモリに格納されますか?

    int main() 
    { 
        volatile int a =10; 
        printf("Local A value=%d",a); 
        return 0; 
    } 
    

それがスタック/ RAM /データ・セグメントに格納されますでしょうか?

疑問を明確にしてください。

+0

あなたはどんな答えをお探しですか? 「メモリにはどこに格納されますか?」という意味はどうですか?そのアドレスを取得しようとしていますか?そのようなプールの標準の定義に基づいて、そのような変数がどのようなメモリプールから来るのか理解しようとしていますか? –

+1

@NicolBolas:私は、質問の一部は、 'volatileが付いた変数を修飾すると、コンパイラが変数を配置するメモリの場所を変更しますが、答えは' no 'となっていると思います。 –

+0

これが他の複製とどう違うのか分かりません。もう一つは「揮発性」とは何か、これは「メモリアドレスに関する結果」です。 – glglgl

答えて

13

volatileは、変数の値をレジスタにキャッシュすることはできず、割り当てられた場所は変更されません。

+0

プログラム全体から 'var'を削除するような、コンパイラの最適化プロセスのいくつかの欠点を防ぐのに役立つことがあります。基本的にコンパイラはプログラム全体で使われていなくてもそれを削除しないとしても 'var'を考慮します。 – user2485710

11

volatile修飾子を変数宣言に追加しても、その記憶域クラスは変更されません。

最初の例では、変数には静的記憶域があり、2番目の例では自動記憶域があります。これは、volatile修飾子を削除しても同じです。

+0

こんにちはすべて、お返事ありがとうございます。 – SenthilKumar

+0

こんにちは、すべての私の最初の例では、私は理解してグローバル初期化された変数(揮発性なし)は、 "初期化されたデータセグメント"と2番目の例では、変数キーワードを追加すると、変数の場所が変更されますか? – SenthilKumar

関連する問題