Функция FunctionTailcall
Уведомляет профилировщика о том, что выполняющаяся в данный момент функция выполняет вызов хвоста другой функции.
Примечание
Функция FunctionTailcall
устарела в платформа .NET Framework версии 2.0. Он будет продолжать работать, но повлечет за собой снижение производительности. Вместо этого используйте функцию FunctionTailcall2 .
Синтаксис
void __stdcall FunctionTailcall (
[in] FunctionID funcID
);
Параметры
funcID
[in] Идентификатор выполняющейся в данный момент функции, которая будет выполнять вызов хвоста.
Комментарии
Целевая функция в заключительном вызове будет использовать текущий кадр стека и будет возвращаться непосредственно вызывающей функции, которая сделала вызов хвоста. Это означает, что обратный вызов FunctionLeave не будет выполняться для функции, которая является целевым объектом для заключительного вызова.
Функция FunctionTailcall
является обратным вызовом; ее необходимо реализовать. Реализация должна использовать __declspec
атрибут класса хранения (naked
).
Подсистема выполнения не сохраняет регистры перед вызовом этой функции.
При записи необходимо сохранить все регистры, которые вы используете, включая регистры в единице С плавающей запятой (FPU).
При выходе необходимо восстановить стек, вырвав все параметры, которые были отправлены вызывающим элементом.
Реализация FunctionTailcall
не должна блокироваться, так как это приведет к задержке сборки мусора. Реализация не должна пытаться выполнить сборку мусора, так как стек может не находиться в состоянии, удобном для сборки мусора. При попытке сборки мусора среда выполнения будет блокироваться до возврата FunctionTailcall
.
Кроме того, FunctionTailcall
функция не должна вызывать управляемый код или каким-либо образом вызывать выделение управляемой памяти.
Требования
Платформы: см. раздел Требования к системе.
Заголовка: CorProf.idl
Библиотека: CorGuids.lib
платформа .NET Framework версии: 1.1, 1.0