有人可以向我解释以下代码吗?
adjustedbuf = (void *) ((uint64_t) buf & ~(pagesize - 1))
我不明白这个说法。
答案 0 :(得分:6)
假设pagesize
是2的幂,其二进制表示将类似于:
0000 10000000 // assume page size = 2^7 = 128
所以pagesize-1
将是:
0000 01111111 // 127
否定(~
)将是一个位掩码,所有高位都设置,直到"页面大小"位:
1111 10000000
如果您&
有任何结果,那么最终会得到一个"四舍五入的数字"到页面大小的倍数
1100 10110110
& 1111 10000000
= 1100 10000000
该声明正在做什么。它将buf
与页面大小边界对齐。
(如果pagesize
不是2的幂,那么整个事情就没有多大意义。)
答案 1 :(得分:2)