web-dev-qa-db-ja.com

シンボルテーブルとは

誰かがCとC++のコンテキスト内でシンボルテーブルが何であるかを説明できますか?

78
jdt141

ここには、シンボルテーブルの2つの一般的で関連する意味があります。

まず、オブジェクトファイルにシンボルテーブルがあります。通常、CまたはC++コンパイラは、単一のソースファイルを、拡張子が.objまたは.oのオブジェクトファイルにコンパイルします。これには、リンカが処理可能なアプリケーションまたは共有ライブラリに処理できる実行可能コードとデータのコレクションが含まれます。オブジェクトファイルにはシンボルオブジェクトと呼ばれるデータ構造があり、オブジェクトファイル内のさまざまなアイテムをリンカが理解できる名前にマップします。コードから関数を呼び出す場合、コンパイラはオブジェクトファイルにルーチンの最終アドレスを入れません。代わりに、プレースホルダー値をコードに挿入し、処理中のすべてのオブジェクトファイルからさまざまなシンボルテーブルの参照を検索し、そこに最終的な場所を固定するようにリンカーに指示するメモを追加します。

第二に、共有ライブラリまたはDLLにもシンボルテーブルがあります。これはリンカによって生成され、ライブラリのユーザーに表示されるすべての関数とデータ項目に名前を付けるのに役立ちます。これにより、システムはランタイムリンクを実行し、それらの名前への開いている参照を、ライブラリがメモリにロードされる場所に解決します。

さらに詳しく知りたい場合は、ジョン・レバインの優れた本「リンカーとローダー」をお勧めします。 link text

73
Ben Combee

簡単に言うと、変数をメモリ内のアドレスに割り当てる名前のマッピングであり、タイプ、スコープ、サイズなどのメタデータが含まれます。コンパイラーによって使用されます。

これは一般に、C [++] *だけではありません。技術的には、常に直接メモリアドレスが含まれているとは限りません。コンパイラが対象としている言語、プラットフォームなどによって異なります。

23
Steve Landey

Linuxでは、次のコマンドを使用できます。

nm [オブジェクトファイル]

そのオブジェクトファイルのシンボルテーブルをリストします。

13
user188276

シンボルテーブルは、プログラム/ユニット内の「シンボル」のリストです。シンボルはほとんどの場合、変数または関数の名前です。シンボルテーブルを使用して、メモリ内の変数または関数の場所を決定できます。

8
Joe Schneider

シンボルテーブル ウィキペディアのエントリを確認してください。

4
Allan Wind

シンボルテーブルは、変数名、関数名、オブジェクト、クラス、インターフェイスなどのさまざまなエンティティの出現に関する情報を格納するために、コンパイラによって作成および管理される重要なデータ構造です。

0
rashedcs