Skip to main content

テールコールとは何ですか?

computerコンピュータープログラミングでは、テールコールはプログラムソースコード内の特定の状況であり、機能、サブルーチン、または手順は、単に戻り値を保持する変数を渡すのではなく、別の関数を呼び出すことにより、期待値を返します。名前自体は、返される値を計算するために呼び出される関数が、それを呼び出す関数の最後に、返品値を提供することであることを示します。特定の最適化またはコンパイラの動作により、メイン関数のコード場所を保存するために追加のスタックスペースが使用されないため、一部のプログラマにとってテールコールは興味深いものです。代わりに、テール関数は、元の関数が呼び出されたコールポイントに直接戻るリターン値レポートを生成するために使用されます。テールコールの使用は、再帰が非常に深く深く脱出してプログラムの実行を停止する可能性がある場合に発信者アドレスを保存するために使用されるスタックスペースの量が発信者アドレスを保存するために使用されるスタックスペースの量であるため、再帰が採用される状況では特に役立ちます。テールコールを使用すると、プログラムの速度、メモリの使用量、効率が向上するのに役立ちますが、特にのケースでは、ソースコードがデバッグと追跡を困難にする方法で呼び出しを使用するように再構築される状況につながる可能性もあります。再帰。プレートのスタックのようなスタックは、最初の、最後のデータ構造です。関数、サブルーチン、または手順が呼び出されると、スタックフレームと呼ばれるコールが作成されるアドレスがスタックに保存されます。これは、関数aを呼び出すプログラムを意味します。これは、関数Bを呼び出し、2つのスタックフレームを持ち、1つは関数B用、もう1つは関数A用です。スタックと実行は機能Aに戻ります。フレームが完了したときにフレームがスタックから飛び出し、最終的にプログラム制御を元々呼び出されたポイントからプログラム制御を返します。関数は、別の関数の返品値をデータとして直接使用して、呼び出しコードに送信されます。上記の例では、関数aがreturnステートメントを使用して関数bを直接呼び出す場合、テールコールが形成されました。コールスタック内で、関数AとBの両方のスタックフレームを持つ代わりに、関数Bは関数Aから戻りアドレスを受信し、関数Aのスタックフレームはポップされ、廃棄されます。最初にコントロールを機能Aに戻さずに機能Aと呼ばれる場所にA.機能の呼び出し速度が向上し、スタック内の情報の量を抑えるのに役立ちます。それらは、再帰機能にとって非常に魅力的なオプションです。再帰関数とは、リストデータ構造を通過する場合の場合のように、値を計算するために繰り返しそれ自体を呼び出すものです。ネストされた関数呼び出しに追加のスタックフレームは作成されていないため、スタックオーバーフローと可能なプログラム終了の即時の脅威なしに、非常に深いレベルの再帰を安全に実行できます。