ngx_align_ptr宏

http://blog.csdn.net/chanlp129/article/details/8842067

在 core/ngx_config.h 里面

[cpp]  view plain copy
  1. #ifndef NGX_ALIGNMENT  
  2. #define NGX_ALIGNMENT   sizeof(unsigned long)    /* platform word */  
  3. #endif  
  4.   
  5. #define ngx_align(d, a)     (((d) + (a - 1)) & ~(a - 1))  
  6. #define ngx_align_ptr(p, a)                                                   \  
  7.     (u_char *) (((uintptr_t) (p) + ((uintptr_t) a - 1)) & ~((uintptr_t) a - 1))  
先分析  (((d) + (a - 1)) & ~(a - 1))表达式
理解表达式  ~(a - 1)注意,其中a为2的幂,设右数第n位为非零位,则a-1为右数的n-1位均为1, 则有~(a-1)为最后的n-1位全为0;

显然可得一个数和2的幂进行  减一取反再按位与操作,即为该数减去(其与a求余的值)

这种计算地址或者长度对齐,取整的宏还是很有用的。cpu访问对齐的数据较快,不对齐的的int之类的,有可能区要多次内存访问才能取到值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值