8

グローバル変数と静的変数について学んだことから、C 変数がソース ファイル内のすべての関数の外側で次のように宣言されている場合:

int a;  

この変数は、そのファイルに extern 宣言があると、他のファイルからアクセスできます。
ただし、同じ変数が次のように宣言されている場合:

static int a;

この変数は現在のファイルでのみ使用でき、他のファイルはこの変数を見ることができません。

  1. 実行時にプログラムがメモリにロードされると、グローバル変数と静的変数の両方がこのプログラムのデータ セクションに存在します。
    両方が同じメモリセグメントに格納されているため、静的変数がその範囲外の命令で使用されないように保護されていることを理解したいと思います。
    私が思うに、変数のスコープとそのアクセスはコンパイラによって処理されます。私が間違っている場合はコメントしてください。詳細が欠落している場合は追加してください。

  2. 外部変数について。もしも、

    int a;  
    

    ファイル file1.c で定義され、ファイル file2.c で次のように宣言されています。

    extern int a;  
    

    両方のファイルは異なるプロセスに属しており、それぞれ process1 と process2 とします。したがって、プロセス 1 が実行され、そのアドレス空間がメモリにロードされると、そのデータ セクション変数「a」が使用可能になります。
    ここで疑問があります。つまり、プロセス 2 が実行されているときに、この変数はプロセス 2 のデータ セクションにもロードされますか? またはそれがどのように管理されているか。

上記の疑問を解消するのを手伝ってください。Web で検索し、いくつかの記事を読みましたが、理解が正しいかどうかを確認する必要があります。
麻生さん、上記の概念を明確に理解するのに役立つ良い記事や本を教えてください。

4

5 に答える 5

2
  1. 静的変数にはメモリ内のアドレスとサイズが割り当てられますが、アドバタイズされません。そのため、あるファイルに があり、別のファイルからstatic int a;参照しようとするとextern int a;、「リンクエンド」が見つからないため、機能しません。

    仕事をするためには、利用可能であることexternを宣伝する「何か」がなければなりません。astatic

  2. いいえ、それらは異なるプロセスに属していません。それらは 1 つの実行可能ファイルにリンクされ、実行されます。通常、異なるプロセスは互いのメモリにアクセスできません。

于 2013-06-06T07:36:42.943 に答える