__unaligned
Po zadeklarowaniu wskaźnika z modyfikatorem __unaligned, kompilator zakłada, że wskaźnik adresuje dane, które nie są wyrównane.W związku z tym dla aplikacji, która jest przeznaczona dla komputera z rodziny procesorów Itanium (IPF), kompilator wygeneruje kod, który odczytuje niewyrównane dane, jeden bajt za każdym razem.
Uwagi
Modyfikator __unaligned jest prawidłowy dla kompilatorów x64 i Itanium, ale wpływa tylko na aplikacje, które są przeznaczone na komputer IPF.Ten modyfikator opisuje tylko wyrównanie adresowanych danych; zakłada się, że wskaźnik sam w sobie jest wyrównany.
Procesor Itanium generuje błąd wyrównania, gdy uzyska dostęp do nieprawidłowo wyrównanych danych, a czas przetwarzania błędu osłabia wydajności.Należy użyć modyfikatora __unaligned, aby procesor odczytywał dane po jednym bajcie na raz i w celu uniknięcia błędu.Ten modyfikator nie jest wymagany dla aplikacji x64, ponieważ procesor x64 obsługuje nieprawidłowo wyrównane dane bez generowania błędu.
Aby uzyskać więcej informacji dotyczących wyrównania, zobacz:
Przykład
// 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");
}
}