1. ホーム
  2. c++

[解決済み] シンボルテーブルとは?

2023-04-03 05:34:51

質問

CとC++の文脈で、シンボルテーブルが何であるかを説明できる人がいますか?

どのように解決するのですか?

シンボルテーブルには、2つの共通する意味があります。

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

第二に、共有ライブラリまたは DLL のシンボル テーブルもあります。 これはリンカーによって作成され、ライブラリのユーザーから見えるすべての関数とデータ項目に名前を付ける役割を果たします。 これにより、システムはランタイム リンクを行い、これらの名前へのオープン リファレンスを、ライブラリがメモリにロードされる場所に解決することができます。

もっと学びたいのであれば、John Levine の素晴らしい本 "Linkers and Loaders" をお勧めします。 リンクテキスト