更新 : 2007 年 11 月
現在実行中の関数が、別の関数への tail 呼び出しを実行する直前であることを、プロファイラに通知します。
![]() |
---|
FunctionTailcall 関数は、.NET Framework Version 2.0 での使用は推奨されていません。機能はしますが、パフォーマンスが低下します。代わりに、FunctionTailcall2 関数を使用してください。 |
void FunctionTailcall (
[in] FunctionID funcID
);
パラメータ
- funcID
[入力] tail 呼び出しを実行する直前である、現在実行中の関数の識別子。
解説
tail 呼び出しの対象の関数は現在のスタック フレームを使用し、tail 呼び出しを行った関数の呼び出し元に直接戻ります。つまり、tail 呼び出しの対象である関数では、FunctionLeave コールバックは発行されません。
FunctionTailcall 関数はコールバックですが、ユーザー自身で実装する必要があります。実装では、__declspec(naked) ストレージ クラス属性を使用する必要があります。
この関数を呼び出すまで、実行エンジンはレジスタをまったく保存しません。
エントリ時に、使用するすべてのレジスタを、浮動小数点ユニット (FPU) のレジスタも含めて保存する必要があります。
終了時に、呼び出し元によってプッシュされたすべてのパラメータをポップすることで、スタックを復元する必要があります。
ガベージ コレクションが遅延するので、FunctionTailcall の実装ではブロックを行わないでください。スタックがガベージ コレクションを実行できる状態とは限らないため、実装ではガベージ コレクションを実行しないでください。ガベージ コレクションが試行された場合、ランタイムは、FunctionTailcall が戻るまでブロックを行います。
さらに、FunctionTailcall 関数では、マネージ コードを呼び出さないようにする必要があります。呼び出すと、マネージ メモリの割り当てが実行されます。
必要条件
プラットフォーム : 「.NET Framework システム要件」を参照
ヘッダー : CorProf.idl
ライブラリ : CorGuids.lib
.NET Framework のバージョン : 1.1、1.0
参照
参照
ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 メソッド