了解記憶體地址何時對齊或未對齊

了解記憶體地址何時對齊或未對齊

我收到核心錯誤,因為 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

相關內容