关于以固定字节对齐的指针偏移位置的计算

#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)))

posted on 2014-09-09 20:15  菜鸟基地  阅读(647)  评论(0)    收藏  举报

导航