




Предпосылки:
Эта инструкция:
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