Em suma, um endereço não alinhado é um tipo simples (isto é, inteiro ou variável de ponto flutuante) que é maior que (normalmente) um byte e não é divisível pelo tamanho do tipo de dados que se tenta ler.
Address % Size != 0
Digamos que você tenha esse intervalo de memória e leia 4 bytes:
+---------- 8 % 4 = 0, OK
|
______+______
| |
... 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
* | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
--+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
|_______.______|
|
+--- 10 % 4 = 2, Unaligned
Mais sobre o assunto em Documentation / unaligned-memory-access.txt .