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