FunctionTailcall-Funktion
Benachrichtigt den Profiler, dass die derzeit ausgeführte Funktion einen Endaufruf an eine andere Funktion durchführt.
Hinweis
Die FunctionTailcall
-Funktion ist in .NET Framework (Version 2.0) veraltet. Sie funktioniert weiterhin, verursacht aber Leistungseinbußen. Verwenden Sie stattdessen die Funktion FunctionTailcall2.
Syntax
void __stdcall FunctionTailcall (
[in] FunctionID funcID
);
Parameter
funcID
[in] Der Bezeichner der derzeit ausgeführten Funktion, die einen Endaufruf ausführen soll.
Bemerkungen
Die Zielfunktion des Tail-Aufrufs verwendet den aktuellen Stapelrahmen und kehrt direkt zum Aufrufer der Funktion zurück, die den Tail-Aufruf ausgeführt hat. Dies bedeutet, dass ein FunctionLeave-Callback nicht für eine Funktion ausgegeben wird, die das Ziel eines Tail-Aufrufs ist.
Die FunctionTailcall
-Funktion ist ein Rückruf. Sie müssen sie implementieren. Die Implementierung muss das Speicherklassenattribut __declspec
(naked
) verwenden.
Die Ausführungs-Engine speichert keine Register, bevor diese Funktion aufgerufen wird.
Bei der Eingabe müssen Sie alle Register speichern, die Sie verwenden, einschließlich der Register in der Gleitkommaeinheit (Floating-Point Unit, FPU).
Beim Beenden müssen Sie den Stapel wiederherstellen, indem Sie alle Parameter deaktivieren, die vom Aufrufer gepusht wurden.
Die Implementierung von FunctionTailcall
darf nicht blockieren, da dadurch die Garbage Collection verzögert wird. Die Implementierung darf keine Garbage Collection versuchen, da sich der Stapel möglicherweise nicht in einem für eine Garbage Collection geeigneten Zustand befindet. Wenn eine Garbage Collection versucht wird, blockiert die Runtime, bis FunctionTailcall
zurückgegeben wird.
Die FunctionTailcall
-Funktion darf zudem keinen verwalteten Code aufrufen oder in irgendeiner Weise eine verwaltete Arbeitsspeicherzuteilung verursachen.
Anforderungen
Plattformen: Informationen finden Sie unter Systemanforderungen.
Header: CorProf.idl
Bibliothek: CorGuids.lib
.NET Framework-Versionen: 1.1, 1.0