シンボルテーブル

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

シンボルテーブル: Symbol table)は、コンパイラインタプリタといった言語変換を行うソフトウェアで使われるデータ構造であり、プログラムのソースコード内の各識別子と、それぞれの宣言内容やソース内での見た目(データ型スコープレベル、位置など)などの情報を結び付けている。

実装[編集]

典型的な実装としては、ハッシュテーブルを使った実装がある。コンパイラは、1つの大きなシンボルテーブルで全シンボル(識別子)を扱う場合と、スコープ毎に分割された階層型のシンボルテーブルを使う場合がある。

利用[編集]

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

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

[編集]

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

シンボルテーブルの例
アドレス 名前
00000020 a T_BIT
00000040 a F_BIT
00000080 a I_BIT
20000004 t irqvec
20000008 t fiqvec
2000000c t InitReset
20000018 T _main
20000024 t End
20000030 T AT91F_US3_CfgPIO_useB
2000005c t AT91F_PIO_CfgPeriph
200000b0 T main
20000120 T AT91F_DBGU_Printk
20000190 t AT91F_US_TxReady
200001c0 t AT91F_US_PutChar
200001f8 T AT91F_SpuriousHandler
20000214 T AT91F_DataAbort
20000230 T AT91F_FetchAbort
2000024c T AT91F_Undef
20000268 T AT91F_UndefHandler
20000284 T AT91F_LowLevelInit
200002e0 t AT91F_DBGU_CfgPIO
2000030c t AT91F_PIO_CfgPeriph
20000360 t AT91F_US_Configure
200003dc t AT91F_US_SetBaudrate
2000041c t AT91F_US_Baudrate
200004ec t AT91F_US_SetTimeguard
2000051c t AT91F_PDC_Open
2000059c t AT91F_PDC_DisableRx
200005c8 t AT91F_PDC_DisableTx
200005f4 t AT91F_PDC_SetNextTx
20000638 t AT91F_PDC_SetNextRx
2000067c t AT91F_PDC_SetTx
200006c0 t AT91F_PDC_SetRx
20000704 t AT91F_PDC_EnableRx
20000730 t AT91F_PDC_EnableTx
2000075c t AT91F_US_EnableTx
20000788 T __aeabi_uidiv
20000788 T __udivsi3
20000884 T __aeabi_uidivmod
2000089c T __aeabi_idiv0
2000089c T __aeabi_ldiv0
2000089c T __div0
200009a0 D _data
200009a0 A _etext
200009a0 D holaamigosh
200009a4 A __bss_end__
200009a4 A __bss_start
200009a4 A __bss_start__
200009a4 A _edata
200009a4 A _end

関連項目[編集]

外部リンク[編集]