在学习LwIP协议的过程中,用到了大量的字节对齐的概念
- #define MEM_ALIGNMENT 4 //这里按照四字节对齐的方式进行的
- #ifndef LWIP_MEM_ALIGN_SIZE
#define LWIP_MEM_ALIGN_SIZE(size) (((size) + MEM_ALIGNMENT - 1) & ~(MEM_ALIGNMENT-1))
- //这里定义宏,将size进行字节对齐方式处理
下面主要说明一下这个字节对齐方式的原理:
对于
(MEM_ALIGNMENT-1),假设
MEM_ALIGNMENT=4,则~
(MEM_ALIGNMENT-1)=0x1100
主要是将变量size的最低两位置零,然后就变为4的整数倍了。
但是需要加上 MEM_ALIGNMENT - 1大小的字节,否则会小于原来的字节,造成数据丢失。
因此上面的第2行的宏定义得到的就是按照四字节对齐的并且是比原来字节大的字节。
eg: 如果现在的size=510,则经过上面的运算得到的应该是512而不是508.