コンパイラの内部で何が起こっているかを知りたい...グローバル変数を別の場所に保存するかどうかなど。
3 に答える
シンボル テーブルに関するウィキペディアのページで、基本的な理解を得ることができます。
http://en.wikipedia.org/wiki/Symbol_table
コンピューター サイエンスでは、シンボル テーブルは、コンパイラーやインタープリターなどの言語翻訳者によって使用されるデータ構造であり、プログラムのソース コード内の各識別子は、その型など、ソース内での宣言または外観に関連する情報に関連付けられています。スコープ レベルと、場合によってはその場所。
[...]
一般的な実装手法は、ハッシュ テーブルの実装を使用することです。コンパイラは、すべてのシンボルに対して 1 つの大きなシンボル テーブルを使用することも、異なるスコープに対して分離された階層シンボル テーブルを使用することもあります。
鉱山を強調します。
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;
};
通常、変数には 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