理解调整缓冲区的代码

时间:2014-05-26 18:42:14

标签: c

有人可以向我解释以下代码吗?

adjustedbuf = (void *) ((uint64_t) buf & ~(pagesize - 1))

我不明白这个说法。

2 个答案:

答案 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)

使用位操作对页面对齐缓冲区。见

How to allocate aligned memory only using the standard library?

更深入。