了解内存地址何时对齐或未对齐

了解内存地址何时对齐或未对齐

我收到内核错误,因为 ppp 驱动程序正在尝试访问未对齐的地址(有一个指针指向未对齐的地址)。我不确定未对齐地址的含义。这意味着不是多个或 4 个或超出 RAM 范围?如果我的系统有一个 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

有关此事的更多信息,请参见文档/unaligned-memory-access.txt

相关内容