Вот мой код:
char data[5] = {0x1, 0x2, 0x3, 0x4, 0x5 };
int *ptr = (int *)(data + 1);
int value = *ptr;
printf("address of data= %lu\n",data);
printf("address of data +1 = %lu\n",data+1);
Когда я компилирую с помощью gcc -Wcast-align для ARM, он выдает предупреждение «приведение увеличивает требуемое выравнивание целевого типа».
Но когда я запускаю его на процессоре ARM, он не генерирует исключение неправильного доступа.
printf показал, что данные расположены по адресу, кратному 4, и, следовательно, data+1 является нечетным адресом, который должен генерировать невыровненное исключение.
Я установил для /proc/cpu/alignment значение 3. Не получил никакого сообщения в dmesg.
Почему я не получаю исключение?