__unaligned

声明带有 __unaligned 修饰符的指针时,编译器将假定该指针处理未对齐的数据。 因此,对于面向 Itanium Processor Family (IPF) 计算机的应用程序,编译器将生成逐个字节地读取未对齐数据的代码。

备注

__unaligned 修饰符对 x64 和 Itanium 编译器有效,但只会影响面向 IPF 计算机的应用程序。 此修饰符只描述已处理数据的对齐;指针本身被假定为已对齐。

Itanium 处理器在访问未对齐的数据时会产生对齐错误,而处理故障的时间会降低性能。 使用 __unaligned 修饰符可以让处理器逐个字节地读取数据并避免错误。 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++ 关键字