__unaligned
__unaligned の修飾子を指定してポインターを宣言する場合コンパイラはポインターが配置されないデータのアドレスを前提としています。その結果IPF (Itanium Processor Family) コンピューターを対象とするアプリケーション (IPF) の場合コンパイラは 1 バイトでアライメントされていないデータを一度に読み込むコードを生成します。
解説
__unaligned の修飾子は x64 と Itanium コンパイラに対して有効ですがはコンピューターを対象とするアプリケーションにのみ影響します。この修飾子はアドレスのみデータの配置について説明します ; ポインター自体が整列すると見なされます。
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");
}
}