#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的整数倍,楼主表示还没有研究透彻,待续吧。。。