다음을 통해 공유


OpCodes.Unaligned 필드

정의

현재 계산 스택의 맨 위에 있는 주소가 바로 다음에 오는 ldind, stind, ldfld, stfld, ldobj, stobj, initblk 또는 cpblk 명령의 기본 크기에 따라 정렬될 수 없음을 나타냅니다.

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

필드 값

설명

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

서식 어셈블리 형식 Description
FE 12 <unsigned int8> 정렬. alignment 후속 포인터 명령이 정렬되지 않을 수 있음을 나타냅니다.

스택 전환 동작은 순차적으로 다음과 같습니다.

  1. 주소가 스택에 푸시됩니다.

Unaligned는 스택의 주소(관리되지 않는 포인터, native int)가 바로 다음 ldind, ldobjstindstfldstobjldfldinitblk또는 cpblk 명령의 자연 크기에 맞춰지지 않을 수 있음을 지정합니다. 즉, 명령의 Ldind_I4 경우 주소의 맞춤이 4 바이트 경계에 있지 않을 수 있습니다. 의 경우 initblk 기본 cpblk 맞춤은 아키텍처에 따라 달라집니다(32비트 CPU의 경우 4비트, 64비트 CPU의 경우 8비트). 출력을 32비트 단어 크기로 제한하지 않는 코드 생성기는 컴파일 시간에 맞춤을 8 바이트로 알 수 없는 경우 를 사용해야 unaligned 합니다.

맞춤 값은 1, 2 또는 4여야 하며 생성된 코드는 주소가 각각 바이트, 더블 바이트 또는 쿼드 바이트 정렬이라고 가정해야 합니다. 일시적인 포인터(형식 *)는 항상 정렬됩니다.

명령에 대한 cpblk 맞춤에는 논리적으로 두 개의 숫자(원본과 대상에 대한 숫자)가 필요하지만, 더 낮은 숫자만 지정하면 성능에 눈에 띄는 영향이 없습니다.

unalignedvolatile 접두사는 두 순서로 결합할 수 있습니다. , , , stfldinitblkstindldfldldobjstobj또는 cpblk 명령 바로 앞에 ldind있어야 합니다. 및 Stsfld 지침에는 Volatile 접두사만 허용 Ldsfld 됩니다.

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

적용 대상