Comparteix a través de


FunctionTailcall2 (Función)

Notifica al generador de perfiles que la función que se está ejecutando actualmente está a punto de realizar una llamada de cola a otra función y proporciona información sobre el marco de pila.

Sintaxis

void __stdcall FunctionTailcall2 (  
    [in] FunctionID         funcId,
    [in] UINT_PTR           clientData,
    [in] COR_PRF_FRAME_INFO func  
);  

Parámetros

funcId [in] Identificador de la función que se está ejecutando actualmente y que está a punto de realizar una llamada de cola.

clientData [in] Identificador de función reasignada, que el generador de perfiles ha especificado anteriormente mediante FunctionIDMapper, de la función que se está ejecutando actualmente y que está a punto de realizar una llamada de cola.

func [in] El valor COR_PRF_FRAME_INFO de este parámetro se usa para apuntar a la información sobre el marco de pila.

El generador de perfiles debe tratar este valor como si fuese un manipulador opaco que se puede devolver al motor de ejecución en el método ICorProfilerInfo2::GetFunctionInfo2.

Comentarios

La función de destino de la llamada de cola usará el marco de pila actual y devolverá un valor directamente al autor de la llamada de la función que ha realizado la llamada de cola. Esto significa que no se emitirá una devolución de llamada de FunctionLeave2 para una función que sea el destino de una llamada de cola.

El valor del parámetro func no será válido una vez que la función FunctionTailcall2 devuelva un valor, ya que puede que este cambie o se destruya.

La función FunctionTailcall2 es una devolución de llamada y, como tal, debe implementarse. La implementación debe usar el atributo __declspec(naked) de las clases de almacenamiento.

El motor de ejecución no guarda ningún registro antes de que se llame a esta función.

  • En el proceso de entrada de la función, deberá guardar todos los registros que use, incluidos los de la unidad de punto flotante (FPU).

  • En el proceso de salida, deberá quitar todos los parámetros que haya insertado su llamador para restaurar la pila.

La implementación de la función FunctionTailcall2 no debe bloquearse, ya que esto producirá retrasos en los procesos de recolección de elementos no utilizados. En la implementación, no deberá intentarse realizar un proceso de recolección de elementos no utilizados, ya que es posible que la pila esté en un estado en el que este no se pueda realizar. Si se intenta realizar un proceso de recolección de elementos no utilizados, el tiempo de ejecución se bloqueará hasta que se devuelva la función FunctionTailcall2.

Además, la función FunctionTailcall2 no deberá usarse para realizar llamadas a código administrado ni para provocar una asignación de memoria administrada sin importar el motivo.

Requisitos

Plataformas: Vea Requisitos de sistema.

Encabezado: CorProf.idl

Biblioteca: CorGuids.lib

Versiones de .NET Framework: disponible a partir de la versión 2.0

Consulte también