「サンク」とは何ですか? 質問する

「サンク」とは何ですか? 質問する

プログラミング (具体的には C++ ドメイン) で使用されているのを見たことがありますが、それが何なのか全くわかりません。おそらくデザイン パターンだと思いますが、間違っているかもしれません。誰か、サンクの良い例を挙げてもらえませんか?

ベストアンサー1

A はthunk通常、関数として呼び出され、何らかの小さな処理を実行し、呼び出し元に戻る代わりに別の場所 (通常は関数) に移動する小さなコードを指しますJUMP。JUMP ターゲットが通常の関数であると仮定すると、戻り時に、サンクの呼び出し元に戻ります。

サンクは多くの便利なものを効率的に実装するために使用できます

  • プロトコル変換 - ある呼び出し規約を使用するコードから別の呼び出し規約を使用するコードを呼び出す場合、をthunk使用して引数を適切に変換できます。これは、戻り規約に互換性がある場合にのみ機能しますが、多くの場合はそうではありません。

  • this仮想関数の処理 - C++ で多重継承された基本クラスの仮想関数を呼び出す場合、ポインターが正しい場所を指すように修正する必要があります。A はthunkこれを実行できます。

  • 動的クロージャ -- 動的クロージャを作成する場合、クロージャ関数は、それが作成されたコンテキストにアクセスできる必要があります。小さなクロージャthunk(通常はスタック上) を作成して、いくつかのレジスタにコンテキスト情報を設定し、クロージャの関数を実装する静的コードにジャンプすることができます。ここでのサンクは、呼び出しサイトでは提供されない 1 つ以上の隠された追加引数を関数に効果的に提供します。

おすすめ記事