ngx_align 爲nginx中的一個值對齊宏。主要在須要內存申請的地方使用,爲了減小在不一樣的 cache line 中內存而生。nginx
// d 爲須要對齊的 // a 爲對齊寬度,必須爲 2 的冪 // 返回對齊值 #define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1))
原理簡單,利用 ~(a - 1)
的低位全爲 0。在與 ~(a - 1)
作 &
操做時,低位的1被丟棄,就獲得了a倍數的值(對齊)。3d
若是使用原始值直接與 ~(a - 1)
作 &
操做,那麼獲得的對齊值是會小於等於原始值的,這樣會形成內存重疊,而指望的對齊值是一個大於等於原始值的,因此須要加上一個數來補上至對齊值這中間的差,這個數爲 (a - 1)
,選擇這個數的緣由是 (a - 1) & ~(a - 1)
的結果爲0:
code