理解调整缓冲区的代码

1 c

任何人都可以向我解释以下代码吗?

adjustedbuf = (void *) ((uint64_t) buf & ~(pagesize - 1))
Run Code Online (Sandbox Code Playgroud)

我不明白这个说法.

Mat*_*Mat 6

假设pagesize是2的幂,它的二进制表示将是这样的:

  0000 10000000  // assume page size = 2^7 = 128
Run Code Online (Sandbox Code Playgroud)

所以pagesize-1将是:

  0000 01111111  // 127
Run Code Online (Sandbox Code Playgroud)

~否则that()将是一个位掩码,所有高位设置,直到"页面大小"位:

  1111 10000000
Run Code Online (Sandbox Code Playgroud)

如果你&有任何东西,你最终会得到一个"向下舍入"到页面大小的倍数的数字

  1100 10110110
& 1111 10000000
= 1100 10000000
Run Code Online (Sandbox Code Playgroud)

这句话正在做什么.它与buf页面大小边界对齐.

(如果pagesize不是两个人的力量,整个事情没有多大意义.)