1

Could anyone explain the following code to me?

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

I don't get the idea of this statement.

Mat
  • 202,337
  • 40
  • 393
  • 406

2 Answers2

6

Assuming pagesize is a power of two, its binary representation will be something like:

  0000 10000000  // assume page size = 2^7 = 128

So pagesize-1 will be:

  0000 01111111  // 127

The negation of that (~) will be a bitmask, with all upper bits set, up to the "page size" bit:

  1111 10000000

If you & that with anything, you end up with a number that is "rounded down" to a multiple of the page size

  1100 10110110
& 1111 10000000
= 1100 10000000

Which is what that statement is doing. It aligns buf to a page size boundary.

(If pagesize isn't a power of two, the whole thing doesn't make much sense.)

Mat
  • 202,337
  • 40
  • 393
  • 406
2

It's page-aligning the buffer using bit operations. See

How to allocate aligned memory only using the standard library?

for more depth.

Community
  • 1
  • 1
bcr
  • 1,328
  • 11
  • 27