__unaligned

포인터를 __unaligned 한정자로 선언하는 경우, 컴파일러는 포인터가 정렬되지 않은 데이터의 주소 지정한다고 가정합니다. 따라서 IPF(Itanium Processor Family) 컴퓨터를 대상으로 하는 응용 프로그램의 경우, 컴파일러는 정렬되지 않은 데이터를 한 번에 1바이트씩 읽는 코드를 생성합니다.

설명

__unaligned 한정자는 x64와 Itanium 컴파일러에 대해 유효하지만 IPF 컴퓨터를 대상으로 하는 응용 프로그램에만 영향을 줍니다. 이 한정자는 주소가 지정된 데이터의 정렬만을 설명하며, 포인터 자체는 정렬된 것으로 가정합니다.

Itanium 프로세서가 정렬이 잘못된 데이터에 액세스할 때 정렬 오류가 발생하며 이 오류를 처리하는 시간으로 인해 성능이 저하됩니다. __unaligned 한정자를 사용해 프로세서가 데이터를 한 번에 1 바이트씩 읽도록 하여 오류를 방지합니다. x64 프로세서를 통해 정렬이 잘못된 데이터가 오류 없이 처리되기 때문에 이 한정자는 x64 응용 프로그램에 필요하지 않습니다.

정렬에 대한 자세한 내용은 다음을 참조하십시오.

예제

// unaligned_keyword.cpp
// compile with: /c
// processor: x64 IPF
#include <stdio.h>
int main() {
   char buf[100];

   int __unaligned *p1 = (int*)(&buf[37]);
   int *p2 = (int *)p1;

   *p1 = 0;   // ok

   __try {
      *p2 = 0;  // throws an exception
   }
   __except(1) {
      puts("exception");
   }
}

참고 항목

참조

C++ 키워드