ngxin這種內存對其是爲了減少向內存或者CPU緩存讀取數據的時候,減少讀取的次數。 類似於讀取硬盤數據時,都是一頁一頁單位讀取的。 能夠保證一次性能夠讀取到完整的數據.
#define ngx_align(d, a) (((d) + (a - 1)) & ~(a - 1))
ngx_align(23,16) 就是取16的最小整數倍 且這個值要大於23 = 32
37&~15
15 轉化爲二進制 00 011111 取反 11 110000
37 二進制 00 100101
00 100101
11 110000
00 100000 = 2的5次方 = 32
php內核 獲取地址ptr以alignment整數對齊的偏移量
#define ZEND_MM_ALIGNED_OFFSET(size, alignment) \
(((size_t)(size)) & ((alignment) - 1))
ZEND_MM_ALIGNED_OFFSET(ptr, alignment) = 0x7ffff126b000 & (2*1024*1024-1) = 438272
(gdb) p 0x7ffff126b000 & (2*1024*1024-1)
$9 = 438272