加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

对齐宏内核

发布时间:2020-12-16 05:45:05 所属栏目:百科 来源:网络整理
导读:我无法理解这个宏是什么.这些在 linux内核中定义,但我的疑问是独立的.我无法理解(((x)(mask))?(mask))行是什么. #define ALIGN(x,a) __ALIGN_MASK(x,(typeof(x))(a)-1)#define __ALIGN_MASK(x,mask) (((x)+(mask))~(mask)) 任何帮助赞赏. 解决方法 假设你有
我无法理解这个宏是什么.这些在 linux内核中定义,但我的疑问是独立的.我无法理解(((x)(mask))&?(mask))行是什么.
#define ALIGN(x,a)              __ALIGN_MASK(x,(typeof(x))(a)-1)
#define __ALIGN_MASK(x,mask)    (((x)+(mask))&~(mask))

任何帮助赞赏.

解决方法

假设你有一个数字:0x1006

由于某些原因,您希望将其与4个字节的边界对齐.

使用4字节边界,您知道对齐的值为0x1000,0x1004,0x1008等
然后您也知道0x1006的对齐值为0x1008.

你会如何获得0x1008?对齐值4的对准掩模为(4 – 1)= 0x03

现在0x1006 0x03 = 0x1009和0x1009& ?0x03 = 0x1008

此操作是__ALIGN_MASK宏.

如果要传递值4(对齐方式)而不是直接传递0x03(对齐掩码),则具有ALIGN宏

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读