3

この「vtablefixup」という用語が使われているのを聞いたことがあります。どういう意味ですか?私はグーグルに尋ねることに成功しなかった。vtableが何であるかはすでに知っているので、定義する必要はありません。

4

2 に答える 2

5

私にとって、Googleは、vtable フィックスアップが PE (Windows) 実行可能ファイル形式の特別な機能であることを明らかにしました。これらは、 ECMA の PE 仕様に従って、vtables (C++ およびその他の言語用) を実装する効率的な方法を提供します。

共通型システム ランタイム モデルに従わないことを選択した特定の言語には、v-table で表す必要がある仮想関数が含まれる場合があります。これらの v-table は、ランタイムではなく、コンパイラによって配置されます。正しい v テーブル スロットを見つけて、そのスロットに保持されている値を介して間接的に呼び出すことも、コンパイラによって行われます。ランタイム ヘッダーの VtableFixups フィールドには、Vtable Fixups の配列の場所とサイズが含まれます (14.5.1 節を参照)。V テーブルは、PE ファイルの読み取り/書き込みセクションに出力されます。

この配列の各エントリは、指定されたサイズの v-table スロットの連続した配列を記述します。各スロットは、呼び出す必要があるメソッドのメタデータ トークン値に初期化されて開始されます。イメージの読み込み時に、ランタイム ローダーは各エントリを CPU のマシン コードへのポインターに変換し、直接呼び出すことができます。

于 2010-02-08T21:46:19.573 に答える
4

簡単な答え: 異なるコンパイラ/言語によって生成されたコードが共存できるようにするのはハックです。これにより、ランタイムは実装の詳細を知らなくても仮想関数の場所を見つけることができます。

于 2010-02-08T21:49:50.620 に答える