__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");
}
}