다음을 통해 공유


OpCodes.Tailcall 필드

정의

실제 호출 명령이 실행되기 전에 현재 메서드의 스택 프레임이 제거되도록 후위 메서드 호출 명령을 수행합니다.

public: static initonly System::Reflection::Emit::OpCode Tailcall;
public static readonly System.Reflection.Emit.OpCode Tailcall;
 staticval mutable Tailcall : System.Reflection.Emit.OpCode
Public Shared ReadOnly Tailcall As OpCode 

필드 값

설명

다음 표에서는 간단한 참조 요약과 함께 명령의 16진수 및 MSIL(Microsoft Intermediate Language) 어셈블리 형식을 나열합니다.

서식 어셈블리 형식 Description
FE 14 꼬리. 후속 호출은 현재 메서드를 종료합니다.

이 명령에 대해 정의된 스택 전환 동작이 없습니다.

tail 접두사 명령은 , Calli또는 Callvirt 명령 바로 앞에 Call있어야 합니다. 호출 명령이 실행되기 전에 현재 메서드의 스택 프레임을 제거해야 했음을 나타냅니다. 또한 다음 호출에서 반환된 값은 현재 메서드에서 반환되는 값이기도 하므로 호출을 메서드 간 점프로 변환할 수 있음을 의미합니다.

스택은 다음 호출에 의해 전송되는 인수를 제외하고 비어 있어야 합니다. 호출 명령 다음의 명령은 ret여야 합니다. 따라서 유효한 코드 시퀀스는 tail. call (또는 callicallvirt)뿐입니다. 올바른 MSIL(Microsoft Intermediate Language) 지침은 명령으로 call 분기해서는 안 되지만 후속 Ret로 분기할 수 있습니다.

컨트롤이 신뢰할 수 없는 코드에서 신뢰할 수 있는 코드로 전송될 때는 현재 프레임을 삭제할 수 없습니다. 이는 코드 ID 보안을 위태롭게 하기 때문이다. 따라서 .NET Framework 보안 검사로 인해 가 tail 무시되고 표준 Call 명령이 남을 수 있습니다. 마찬가지로 호출이 반환 tail 된 후 동기화된 영역의 종료가 발생할 수 있도록 하기 위해 동기화된 것으로 표시된 메서드를 종료하는 데 사용할 때 접두사는 무시됩니다.

다음 Emit 메서드 오버로드는 opcode를 tail 사용할 수 있습니다.

적용 대상