シンボルテーブル

From Wikipedia, the free encyclopedia

シンボルテーブル: symbol table)は、コンパイラインタプリタといったコンピュータプログラミング言語処理系などのプログラムで使われるデータ構造のひとつであり、プログラムのソースコード内の変数名や関数名などの名前(シンボル)と、それぞれの内容(データ型、サイズ、スコープレベル、位置など[1])を表すデータ集合のペアを管理する。つまり、「名前」から対応する「中身」を参照するための情報を格納したテーブルである。

典型的な実装としては、ハッシュテーブルを使った実装がある。コンパイラやインタプリタやその他の処理系は、1つの大きなシンボルテーブルで全てを扱う場合と、名前空間ごとに分割されたシンボルテーブルを使う場合がある。前者の場合は、なんらかの方法で別々の名前空間にある同じ名前が衝突しないようにしなければならない。後者の場合は、名前空間が階層構造になっている場合にはその階層構造に対応した階層構造になっていることもあれば、なっていないこともある。

利用

オブジェクトファイルには、外部から見える識別子についてのシンボルテーブルが含まれていることが多い。複数のオブジェクトファイルをリンケージエディタでリンクする場合、未解決の参照を解決するのにシンボルテーブルを利用する。

シンボルテーブルは変換過程でのみ存在する場合もあるし、最終的な出力に組み込まれる場合もある。後者の場合、例えば、対話型デバッガによるデバッグや、性能解析ツールなどによる実行時の性能情報の収集などでシンボルテーブルが利用される。

以下の表は、GNU Binutilsnm コマンドで小さなプログラムのシンボルテーブルを表示させたときの内容を示したものである。データ(グローバル変数、"D" と表示される)としては holaamigosh だけがあり、他には多数の関数(プログラム内で定義されているものもあれば、標準ライブラリからリンクされたものもある)がある。最初のカラムはシンボルのメモリ上の位置、2番目のカラムはシンボルの型、3番目のカラムはシンボルの名前である。適当な引数を与えれば、シンボルテーブルはアドレス順にソートされて表示される。

シンボルテーブルの例
アドレス名前
00000020aT_BIT
00000040aF_BIT
00000080aI_BIT
20000004tirqvec
20000008tfiqvec
2000000ctInitReset
20000018T_main
20000024tEnd
20000030TAT91F_US3_CfgPIO_useB
2000005ctAT91F_PIO_CfgPeriph
200000b0Tmain
20000120TAT91F_DBGU_Printk
20000190tAT91F_US_TxReady
200001c0tAT91F_US_PutChar
200001f8TAT91F_SpuriousHandler
20000214TAT91F_DataAbort
20000230TAT91F_FetchAbort
2000024cTAT91F_Undef
20000268TAT91F_UndefHandler
20000284TAT91F_LowLevelInit
200002e0tAT91F_DBGU_CfgPIO
2000030ctAT91F_PIO_CfgPeriph
20000360tAT91F_US_Configure
200003dctAT91F_US_SetBaudrate
2000041ctAT91F_US_Baudrate
200004ectAT91F_US_SetTimeguard
2000051ctAT91F_PDC_Open
2000059ctAT91F_PDC_DisableRx
200005c8tAT91F_PDC_DisableTx
200005f4tAT91F_PDC_SetNextTx
20000638tAT91F_PDC_SetNextRx
2000067ctAT91F_PDC_SetTx
200006c0tAT91F_PDC_SetRx
20000704tAT91F_PDC_EnableRx
20000730tAT91F_PDC_EnableTx
2000075ctAT91F_US_EnableTx
20000788T__aeabi_uidiv
20000788T__udivsi3
20000884T__aeabi_uidivmod
2000089cT__aeabi_idiv0
2000089cT__aeabi_ldiv0
2000089cT__div0
200009a0D_data
200009a0A_etext
200009a0Dholaamigosh
200009a4A__bss_end__
200009a4A__bss_start
200009a4A__bss_start__
200009a4A_edata
200009a4A_end

脚注

関連項目

外部リンク

Related Articles

Wikiwand AI