浅谈LWIP对齐问题

在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));

}












评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值