__unaligned
Quando você declara um ponteiro com o modificador __unaligned, o compilador presume que o ponteiro aborda os dados que não são alinhados. Por isso, para um aplicativo cujo alvo é um computador da família de processadores Itanium (IPF), o compilador gera o código que lê os dados não alinhados um byte de cada vez.
Comentários
O modificador __unaligned é válido para os compiladores x64 e Itanium, mas só afeta os aplicativos cujo alvo é um computador IPF. Esse modificador descreve o alinhamento dos dados endereçados apenas; o ponteiro em si é considerado alinhado.
O processador Itanium gera uma falha de alinhamento quando acessa dados desalinhados, e o tempo de processamento da falha enfraquece o desempenho. Use o modificador __unaligned para fazer com que o processador leia os dados de um byte de cada vez e evite a falha. Esse modificador não é necessário para aplicativos do x64 porque o processador x64 trata dados desalinhados sem falhas.
Para obter mais informações sobre alinhamento, consulte:
Exemplo
// 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");
}
}