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