Saiba quando um endereço de memória está alinhado ou desalinhado

Saiba quando um endereço de memória está alinhado ou desalinhado

Estou recebendo oops do kernel porque o driver ppp está tentando acessar um endereço não alinhado (há um ponteiro apontando para um endereço não alinhado). Não tenho certeza sobre o significado de endereço desalinhado. Significa que não é múltiplo ou 4 ou está fora do escopo da RAM? Se meu sistema tiver um barramento de 32 bits de largura, dado um endereço, como posso saber se está alinhado ou desalinhado?

Responder1

Resumindo, um endereço não alinhado é de um tipo simples (por exemplo, inteiro ou variável de ponto flutuante) que é maior que (normalmente) um byte e não é divisível uniformemente 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 emDocumentação/unaligned-memory-access.txt.

informação relacionada