次の方法で共有


FunctionTailcall 関数

現在実行中の関数によって別の関数の末尾呼び出しが実行されようとしていることをプロファイラーに通知します。

Note

FunctionTailcall 関数は、.NET Framework バージョン 2.0 では非推奨です。 これは引き続き機能しますが、パフォーマンスが低下します。 代わりに、FunctionTailcall2 関数を使用してください。

構文

void __stdcall FunctionTailcall (  
    [in] FunctionID funcID  
);  

パラメーター

funcID [in] 末尾呼び出しを実行しようとしている現在実行中の関数の識別子。

解説

末尾呼び出しの対象の関数では現在のスタックフレームが使用され、末尾呼び出しを行った関数の呼び出し元に直接戻ります。 つまり、FunctionLeave コールバックは、末尾呼び出しの対象である関数に対しては発行されません。

FunctionTailcall 関数はコールバックであるため、実装する必要があります。 実装では、__declspec(naked) ストレージ クラス属性を使用する必要があります。

この関数を呼び出す前に、実行エンジンではレジスタは保存されません。

  • 開始時には、浮動小数点演算ユニット (FPU) 内のものを含め、使用するすべてのレジスタを保存する必要があります。

  • 終了時には、呼び出し元によってプッシュされたすべてのパラメーターをポップして、スタックを復元する必要があります。

FunctionTailcall の実装では、ガベージ コレクションが遅れるためブロックしないでください。 スタックがガベージ コレクション対応状態ではない可能性があるため、この実装ではガベージ コレクションを試行しないでください。 ガベージ コレクションが試行された場合、FunctionTailcall が返されるまでランタイムはブロックされます。

また、FunctionTailcall 関数では、マネージド コードを呼び出すことはできません。呼び出すと、何らかのマネージド メモリ割り当てが行われます。

要件

:システム要件」を参照してください。

ヘッダー: CorProf.idl

ライブラリ: CorGuids.lib

.NET Framework のバージョン: 1.1、1.0

関連項目