FunctionTailcall 函数

更新:2010 年 10 月

通知探查器当前正在执行的函数即将对另一个函数执行尾调用。

注意注意

在 .NET Framework 2.0 版中不赞成使用 FunctionTailcall 函数。它将继续工作,但会使性能下降。请改用 FunctionTailcall2 函数。

void __stdcall FunctionTailcall (
    [in] FunctionID funcID
);

参数

  • funcID
    [in] 即将进行尾调用的当前正在执行的函数的标识符。

备注

尾调用的目标函数将使用当前堆栈帧,并将直接返回到进行尾调用的函数的调用方。 这意味着,对于作为尾调用目标的函数,将不会发出 FunctionLeave 回调。

FunctionTailcall 函数是回调;您必须实现该函数。 该实现必须使用 __declspec(naked) 存储类特性。

执行引擎在调用此函数之前未保存任何寄存器。

  • 在进入时,您必须保存您使用的所有寄存器,包括浮点单元 (FPU) 中的那些寄存器。

  • 在退出时,您必须通过弹出由堆栈调用方入栈的所有参数来还原堆栈。

FunctionTailcall 的实现不应进行阻止,因为它将延迟垃圾回收。 实现不应尝试垃圾回收,因为堆栈可能未处于适合进行垃圾回收的状态。 如果尝试进行垃圾回收,运行时将会进行阻止,直至 FunctionTailcall 返回。

另外,FunctionTailcall 函数不得调入托管代码或以任何方式导致托管内存分配。

要求

**平台:**请参见 .NET Framework 系统要求

**头文件:**CorProf.idl

**库:**CorGuids.lib

**.NET Framework 版本:**1.1、1.0

请参见

参考

FunctionEnter2 函数

FunctionLeave2 函数

ICorProfilerInfo2::SetEnterLeaveFunctionHooks2 方法

其他资源

分析全局静态函数

修订记录

Date

修订记录

原因

2010 年 10 月

已将 __stdcall 添加到语法。

客户反馈