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

2

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

    
por MABC 12.10.2013 / 22:00

1 resposta

3

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 .

    
por 12.10.2013 / 22:58