Saber cuándo una dirección de memoria está alineada o no alineada

Saber cuándo una dirección de memoria está alineada o no alineada

Recibo un error del kernel porque el controlador ppp está intentando acceder a una dirección no alineada (hay un puntero que apunta a una dirección no alineada). No estoy seguro del significado de dirección no alineada. ¿Significa que no es múltiple, 4 o está fuera del alcance de la RAM? Si mi sistema tiene un bus de 32 bits de ancho, dada una dirección, ¿cómo puedo saber si está alineado o no alineado?

Respuesta1

En resumen, una dirección no alineada es de tipo simple (por ejemplo, variable entera o de punto flotante) que es mayor que (normalmente) un byte y no es divisible uniformemente por el tamaño del tipo de datos que se intenta leer.

Address % Size != 0

Digamos que tiene este rango de memoria y lee 4 bytes:

                           +---------- 8 % 4 = 0, OK
                           |
                     ______+______
                    |             |
 ... 4   5   6   7   8   9   10  11  12  13  14  15  16  17 ...
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
 * | @ | @ | @ | @ | * | * | * | * | @ | @ | @ | @ | * | * | *
 --+---+---+---+---+---+---+---+---+---+---+---+---+---+---+--
                            |_______.______|
                                    |
                                    +--- 10 % 4 = 2, Unaligned

Más sobre el asunto enDocumentación/acceso-memoria-no alineada.txt.

información relacionada