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


#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*)(((unsignedlonglong)p) & (~(7)))

~(7)是用来对低3位清0 ,并保持高位信息的。

那么如果我想知道,当前p如果不对齐,那么它下一个最近的,8byte对齐的地址,则可以如下设计

(char*)(((unsignedlonglong)p + 7) & (~(7)))

相当于加一位取得最进位置,然后再把低位清0 ,去除余数

如果我想动态的对2的幂次方,如2,4,8,16,32,64的对齐进行设计,则我们就不用7,我们 如下

(char*)(((unsignedlonglong)p + n - 1) & (~(n - 1)))

优质内容筛选与推荐>>
1、双字幕 学外语
2、mysql 命令一套
3、4-11 先序输出叶节点
4、linux常见基本命令
5、PE文件信息获取工具-PEINFO


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号