Partilhar via


Função FunctionTailcall2

Notifica o gerador de perfis de que a função atualmente em execução está prestes a efetuar uma chamada de cauda para outra função e fornece informações sobre a moldura da pilha.

Sintaxe

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

Parâmetros

funcId [in] O identificador da função atualmente em execução que está prestes a fazer uma chamada de cauda.

clientData [in] O identificador de função remapped, que o profiler especificou anteriormente através de FunctionIDMapper, da função atualmente em execução que está prestes a fazer uma chamada de cauda.

func [in] Um COR_PRF_FRAME_INFO valor que aponta para informações sobre a moldura da pilha.

O gerador de perfis deve tratar isto como uma alça opaca que pode ser transmitida de volta para o motor de execução no método ICorProfilerInfo2::GetFunctionInfo2 .

Observações

A função de destino da chamada de cauda utilizará a moldura da pilha atual e regressará diretamente ao autor da chamada da função que efetuou a chamada de cauda. Isto significa que não será emitida uma chamada de retorno FunctionLeave2 para uma função que seja o destino de uma chamada de cauda.

O valor do func parâmetro não é válido após a FunctionTailcall2 função ser devolvida porque o valor pode ser alterado ou destruído.

A FunctionTailcall2 função é uma chamada de retorno; tem de implementá-la. A implementação tem de utilizar o __declspecatributo da classe de armazenamento (naked).

O motor de execução não guarda registos antes de chamar esta função.

  • À entrada, tem de guardar todos os registos que utiliza, incluindo os da unidade de vírgula flutuante (FPU).

  • Ao sair, tem de restaurar a pilha ao remover todos os parâmetros que foram emitidos pelo autor da chamada.

A implementação de FunctionTailcall2 não deve ser bloqueada porque irá atrasar a recolha de lixo. A implementação não deve tentar uma libertação de lixo porque a pilha pode não estar num estado compatível com a libertação da memória. Se for tentada uma libertação de lixo, o runtime bloqueará até FunctionTailcall2 ser devolvido.

Além disso, a FunctionTailcall2 função não pode chamar para o código gerido ou, de alguma forma, causar uma alocação de memória gerida.

Requisitos

Plataformas: Veja Requisitos do Sistema.

Cabeçalho: CorProf.idl

Biblioteca: CorGuids.lib

.NET Framework Versões: Disponível desde 2.0

Ver também