关于以固定字节对齐的指针偏移位置的计算
#define ngx_align_ptr(p->d.last,NGX_ALIGNMENT) (u_char *) (((
uintptr_t
) (p) + ((
uintptr_t
) a - 1)) & ~((
uintptr_t
) a - 1)
作用:以last开始,计算以NGX_ALIGNMENT对齐的偏移位置指针
假设我的每个单元都是8个byte对齐的。那么我想知道当前一个指针地址,最近的8 byte对齐的位置,那么怎么办?
(
char
*)(((unsigned
long
long
)p) & (~(7)))
~(7)是用来对低3位清0 ,并保持高位信息的。
那么如果我想知道,当前p如果不对齐,那么它下一个最近的,8byte对齐的地址,则可以如下设计
(
char
*)(((unsigned
long
long
)p + 7) & (~(7)))
相当于加一位取得最进位置,然后再把低位清0 ,去除余数
如果我想动态的对2的幂次方,如2,4,8,16,32,64的对齐进行设计,则我们就不用7,我们 如下
(
char
*)(((unsigned
long
long
)p + n - 1) & (~(n - 1)))