算法实现:
#define MEM_ALIGNMENT 4 //使用4字节对齐模式
#define SIZEOF_STRUCT_MEM LWIP_MEM_ALIGN_SIZE(sizeof(struct mem))
/** Calculate memory size for an aligned buffer - returns the next highest
* multiple of MEM_ALIGNMENT (e.g. LWIP_MEM_ALIGN_SIZE(3) and
* LWIP_MEM_ALIGN_SIZE(4) will both yield 4 for MEM_ALIGNMENT == 4).
*/
#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))
解析:
size为指定的内存大小,MEM_ALIGNMENT为对齐方式。这里为4字节对齐。
n字节对齐的操作:&(~(n-1))
如果仅仅是检测内存大小是否对齐,我们如下操作就好:
(size) & ~(MEM_ALIGNMENT-1)
然而我们的目的是:修正,
所以,只能够多,不能够少。
以4字节对齐来说,算法实现结果是:
bit0、bit1不全为零,则bit2进位。
如:
LWIP_MEM_ALIGN_SIZE(3)
LWIP_MEM_ALIGN_SIZE(4)
//返回值均为4