Niemniej jednak, dane mogą być odzyskane z dowolnego adresu w pamięci, a w zależności od instrukcji mogą mieć one długość jednego bajta lub większą.
Przykłady Następujący kod źródłowy przedstawia „nierówny” dostęp do pamięci (napisany w języku C za pomocą składni AT&T).
#include <stdlib.h>
int main(int argc, char **argv) { int *iptr; char *cptr;
#if defined(__GNUC__) # if defined(__i386__) /* Aktywowanie walidacji wyrównania na x86 */ __asm__("pushf\norl $0x40000,(%esp)\npopf"); # elif defined(__x86_64__) /* Aktywowanie walidacji wyrównania na x86_64 */ __asm__("pushf\norl $0x40000,(%rsp)\npopf"); # endif #endif
/* malloc() zawsze przydziela "wyrównaną" pamięć */ cptr = malloc(sizeof(int) + 1);
/* Inkrementacja wskaźnika o jeden, przez co stanie się on niewyrównany */ iptr = (int *) ++cptr;
/* Usunięcie referencji jako wskaźnika typu 'int', które spowoduje niewyrównany dostęp */ *iptr = 42;
/* Poniższe operacje spowodują wywołanie błędu sigbus. short *sptr; int i;
sptr = (short *)&i; // Dla każdej inkrementacji nieparzystych wartości nastąpi "sigbus". sptr = (short *)(((char *)sptr) + 1); *sptr = 100;
*/
return 0; }