Пререквизиты:
Эта инструкция:
size = 1 << e;
Означает сдвиг 1, e бита влево, что эквивалентно 1 * (2^e)
.
В этой инструкции:
base = p & ˜(size-1);
p & ˜(size-1)
означает выполнение двоичного и (&) между p и унарным дополнением размера ((size-1)
).
Пример:
allocation space
------------
| | 0001 1111
------------
| . |
| . |
| . |
------------
| | p = 0001 0100
------------
| . |
| . |
| . |
------------
| | 0001 0000
------------
e = log(16) = 4
size = 1 << 4 = 0001 0000
size - 1 = 0000 1111
~(size -1) = 1111 0000
base = 0001 0100 & 1111 0000 = 0001 0000