看板 C_and_CPP 關於我們 聯絡資訊
最近在看driver相關的書籍 看到alignment這邊 一直有個問題想不通 想請教一下各位 書裡面提到一般在將pointer做alignment的時候 是用下面的公式 [pointer + (page_size - 1)] & ~(page_size - 1) 後面的& 的動作可以理解 就是要把後面的位數清成0 變成page size的倍數 可是前面的加(page_size - 1)的動作一直想不懂? 直接將pointer & ~(page_size - 1)不是可以達到一樣的效果嗎? 想了很久的說..^^" Thanks in advance -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.231.73 ※ 編輯: kkdlin 來自: 114.32.231.73 (04/03 22:13)
cole945:你在講的那個是.. 比如說,page 4K, 4.5K取4K, 8.7K取8K 04/03 22:26
cole945:可是你說的那個公式是 4.5K取8K, 8.4K取12K 04/03 22:27
cole945:當然,如果是恰4K的位數,那就會原本的值.. 04/03 22:28
kkdlin:的確 書上那個公式連4.1K都會變成8K 04/03 22:40
kkdlin:所以說這個公式應該沒有所謂絕對的吧? 是這樣吧? thx 04/03 22:41
sunneo:要看用途來製作公式 04/03 22:55
kkdlin:瞭解 感謝解說 04/03 22:59