Узнайте, когда адрес памяти выровнен или не выровнен.

Узнайте, когда адрес памяти выровнен или не выровнен.

Я получаю kernel oops, потому что драйвер ppp пытается получить доступ к невыровненному адресу (есть указатель, указывающий на невыровненный адрес). Я не уверен в значении невыровненного адреса. Это означает не кратно или 4 или вне области действия ОЗУ? Если в моей системе шина шириной 32 бита, как узнать, выровнен он или нет, если задан адрес?

решение1

Короче говоря, невыровненный адрес — это адрес простого типа (например, целочисленная или плавающая переменная), который больше (обычно) байта и не делится нацело на размер типа данных, который пытаемся прочитать.

Address % Size != 0

Допустим, у вас есть этот диапазон памяти и вы считываете 4 байта:

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

Подробнее об этом вДокументация/невыровненный-доступ-к-памяти.txt.

Связанный контент