- 论坛徽章:
- 16
|
回复 18# aweii
判断的是下一层的路径取向,index & mask=1,向右子结点,否则向左子节点,所以mask对根节点不起作用,向下一层,则右移一位。3的话就是移3层。所以根节点下应有3层,然后才是溢出子树
======================================================
mask = 1UL << (root->index_bits - 1);
从这句来看,根的那层移位被忽略了,所以如果index_bits为3,那么这里的mask为1^2,也就是说只能移动两次,然后就是suboverflow tree了。所以根下边到suboverflow tree之间只能有两层
另外《深入理解linux内核》书中这部分的示意图是错的,基索引相同的节点应该在一条路径上,但是该图把r_inde=0的节点放在了兄弟节点的位置,明显有问题。
======================================================
对这个图我也比较疑惑,0,0,0与0,2,2为什么是这个排布
0,4,4
__ |
|
0,2,2
__ |
|
0,0,0
为什么不是这个样子??
|
|