2

コンパイラの内部で何が起こっているかを知りたい...グローバル変数を別の場所に保存するかどうかなど。

4

3 に答える 3

3

シンボル テーブルに関するウィキペディアのページで、基本的な理解を得ることができます。

http://en.wikipedia.org/wiki/Symbol_table

コンピューター サイエンスでは、シンボル テーブルは、コンパイラーやインタープリターなどの言語翻訳者によって使用されるデータ構造であり、プログラムのソース コード内の各識別子は、その型など、ソース内での宣言または外観に関連する情報に関連付けられています。スコープ レベルと、場合によってはその場所。

[...]

一般的な実装手法は、ハッシュ テーブルの実装を使用することです。コンパイラは、すべてのシンボルに対して 1 つの大きなシンボル テーブルを使用することも、異なるスコープに対して分離された階層シンボル テーブルを使用することもあります。

鉱山を強調します。

于 2012-11-12T11:09:29.800 に答える
0

It knows that the variable is global or local by how you declare it.

//declared at namespace scope - global
extern int x;     

int main()
{
   //declared inside a method - local
   int y;
};
于 2012-11-12T11:07:54.860 に答える
0

通常、変数には 4 つのスコープがあります。キーワードを使用しexternて、その変数を明示的に extern にしています (デフォルトでは、グローバル変数は ですextern) 。

static変数または関数のスコープを現在のファイルに制限する

それに応じて、メモリは異なるセグメントに割り当てられます

        global: visible in more than one source file
 -- data segement(also differs whether initialised or uninitialized)


        local : visible with in { } it also called function(){} scope
 -- on stack 


        block : {} inside any function another scope of block valiables with in {}

     -- on stack if with in function 


        file : making static variable is limited to it's file scope or 
    current translation unit. -- again data section
于 2012-11-12T11:13:02.613 に答える