(2), , "". , 4 , , node 4 .
node addr index addr & -(1UL << 32) + index.
"" , "". , index , (node_address, index) (, , ). , node , .
"" 1 , , 32- 2 ^ 31 ( , 2 ^ 31 ).
(, , ) 4 , , node - .
, , "" . , , node N-, N-, . , , , ..
, , mmap ( , ) - hint , , - . , , . , : , 2 ^ N-, "" , , N will always be zero, so with a 32-bit index you could actually save 2 ^ (32 + 5) = 2 ^ 37 nodes if you knew that they were 32-byte aligned.
These tricks are really possible only in 64-bit programs with a huge amount of virtual address space, so the 64-bit method gives and also removes.