netdev_priv

#define	NETDEV_ALIGN		32
#define	NETDEV_ALIGN_CONST	(NETDEV_ALIGN - 1)

static inline void *netdev_priv(struct net_device *dev)
{
	return (char *)dev + ((sizeof(struct net_device)
					+ NETDEV_ALIGN_CONST)
				& ~NETDEV_ALIGN_CONST);
}

其中,

(sizeof(struct net_device) + NETDEV_ALIGN_CONST) & ~NETDEV_ALIGN_CONST

该句的运算结果:

    当 0 < sizeof(struct net_device) <= 32,结果为32;

    当 32 < sizeof(struct net_device) <= 64,结果为64;

    当 64 < sizeof(struct net_device) <= 96,结果为96;

    。。。。

由此可见该句是为了保证运算结果为32的整数倍。

以下是自己的理解:

    NETDEV_ALIGN_CONST的值为31,取反之后就是 1111 1111 1111 1111 1111 1111 1110 0000,该值和任何一个数字做 & 运算,结果一定是32的整数倍。

    至于此处为什么要取32的整数倍,楼主表示还没有研究透彻,待续吧。。。

转载于:https://my.oschina.net/jhdoctor/blog/278670

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值