浅谈LWIP对齐问题

来源:互联网 发布:php入门很简单 pdf 编辑:程序博客网 时间:2024/05/02 02:39

在LWIP库里面,我们看到很多对齐的语句

上代码1:

#ifndef MEM_ALIGNMENT#define MEM_ALIGNMENT                   4 //表示4个字节对齐#endif#ifndef LWIP_MEM_ALIGN_SIZE#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))#endif
实际对齐例子:
#include <stdio.h>#ifndef MEM_ALIGNMENT#define MEM_ALIGNMENT                   4#endif#ifndef LWIP_MEM_ALIGN_SIZE#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))#endif/* *请注意LWIP的内存对齐size一定是2^n次方的方式对齐, *对齐计算方法如下 *///size = 14 为例, MEM_ALIGNMENT =4//(14 + 4 - 1 ) & ~(4 - 1)//所以size + MEM_ALIGNMENT - 1的范围是size < (size + MEM_ALIGNMENT - 1) < (size + MEM_ALIGNMENT)//17 & ~3  //取反去除(MEM_ALIGNMENT - 1)上的位//10001//11100//-----------//10000//得出正确的结果void main(){int size = 13;printf("size:%d\n", LWIP_MEM_ALIGN_SIZE(size));}