OpCodes.Tailcall 필드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
실제 호출 명령이 실행되기 전에 현재 메서드의 스택 프레임이 제거되도록 후위 메서드 호출 명령을 수행합니다.
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
(또는 calli
callvirt
)뿐입니다. 올바른 MSIL(Microsoft Intermediate Language) 지침은 명령으로 call
분기해서는 안 되지만 후속 Ret로 분기할 수 있습니다.
컨트롤이 신뢰할 수 없는 코드에서 신뢰할 수 있는 코드로 전송될 때는 현재 프레임을 삭제할 수 없습니다. 이는 코드 ID 보안을 위태롭게 하기 때문이다. 따라서 .NET Framework 보안 검사로 인해 가 tail
무시되고 표준 Call 명령이 남을 수 있습니다. 마찬가지로 호출이 반환 tail
된 후 동기화된 영역의 종료가 발생할 수 있도록 하기 위해 동기화된 것으로 표시된 메서드를 종료하는 데 사용할 때 접두사는 무시됩니다.
다음 Emit 메서드 오버로드는 opcode를 tail
사용할 수 있습니다.
적용 대상
.NET