__unaligned
Lorsque vous déclarez un pointeur avec le modificateur d' __unaligned , le compilateur suppose que le pointeur adresse des données qui ne sont pas alignée.Par conséquent, pour une application qui cible un ordinateur (IPF) de famille de processeurs Itanium, le compilateur génère du code qui lit aux données non alignées un octet à la fois.
Notes
Le modificateur d' __unaligned est valide pour les compilateurs de x64 et de Itanium mais n'affecte que les applications qui ciblent un ordinateur IPF.Ce modificateur décrit l'alignement des données adressées uniquement ; il est supposé que le pointeur lui-même est aligné.
Le processeur de Itaniumgénère une erreur d'alignement lorsqu'il accède aux données mal alignés, et le temps de traitement l'erreur affaiblit les performances. utilisez le modificateur d' __unaligned pour provoquer au processeur aux données de lecture un octet à la fois et pour éviter le défaut.Ce modificateur n'est pas nécessaire pour les applications de x64car le processeur de x64 traite les données mal alignés sans erreur.
Pour plus d'informations sur l'alignement, consultez :
Exemple
// 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");
}
}