次の方法で共有


__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++ キーワード