OpCodes.Unaligned 필드
정의
중요
일부 정보는 릴리스되기 전에 상당 부분 수정될 수 있는 시험판 제품과 관련이 있습니다. Microsoft는 여기에 제공된 정보에 대해 어떠한 명시적이거나 묵시적인 보증도 하지 않습니다.
현재 계산 스택의 맨 위에 있는 주소가 바로 다음에 오는 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 |
후속 포인터 명령이 정렬되지 않을 수 있음을 나타냅니다. |
스택 전환 동작은 순차적으로 다음과 같습니다.
- 주소가 스택에 푸시됩니다.
Unaligned
는 스택의 주소(관리되지 않는 포인터, native int
)가 바로 다음 ldind
, ldobj
stind
stfld
stobj
ldfld
initblk
또는 cpblk
명령의 자연 크기에 맞춰지지 않을 수 있음을 지정합니다. 즉, 명령의 Ldind_I4 경우 주소의 맞춤이 4 바이트 경계에 있지 않을 수 있습니다. 의 경우 initblk
기본 cpblk
맞춤은 아키텍처에 따라 달라집니다(32비트 CPU의 경우 4비트, 64비트 CPU의 경우 8비트). 출력을 32비트 단어 크기로 제한하지 않는 코드 생성기는 컴파일 시간에 맞춤을 8 바이트로 알 수 없는 경우 를 사용해야 unaligned
합니다.
맞춤 값은 1, 2 또는 4여야 하며 생성된 코드는 주소가 각각 바이트, 더블 바이트 또는 쿼드 바이트 정렬이라고 가정해야 합니다. 일시적인 포인터(형식 *
)는 항상 정렬됩니다.
명령에 대한 cpblk
맞춤에는 논리적으로 두 개의 숫자(원본과 대상에 대한 숫자)가 필요하지만, 더 낮은 숫자만 지정하면 성능에 눈에 띄는 영향이 없습니다.
unaligned
및 volatile
접두사는 두 순서로 결합할 수 있습니다. , , , stfld
initblk
stind
ldfld
ldobj
stobj
또는 cpblk
명령 바로 앞에 ldind
있어야 합니다. 및 Stsfld 지침에는 Volatile 접두사만 허용 Ldsfld 됩니다.
다음 Emit 메서드 오버로드는 opcode를 unaligned
사용할 수 있습니다.
적용 대상
.NET