__unaligned
При объявлении указателя с модификатором __unaligned компилятор предполагает, что указатель обращается к данным без выравнивания. Поэтому для тех приложений, которые предназначены для компьютеров с процессором семейства Itanium, компилятор создает код, считывающий такие данные по одному байту за раз.
Заметки
Модификатор __unaligned допустим для компиляторов x64 и Itanium, но действует только для приложений, предназначенных для компьютеров с процессором семейства Itanium. Этот модификатор описывает только выравнивание данных, к которым выполняется обращение. Сам по себе указатель считается выровненным.
При обращении к данным с неверным выравниванием процессор семейства 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");
}
}