Linux红黑树求解
struct rb_node
{
unsigned long rb_parent_color;
#define RB_RED 0
#define RB_BLACK 1
struct rb_node *rb_right;
struct rb_node *rb_left;
} __attribute__((aligned(sizeof(long))));
所有rb_node变量的地址都是4字节对齐,所以rb_node变量地址的低两位都为0。父节点指针当然指向rb_node型变量,所以父节点指针的低两位也一定为0。所以可以利用这两位来保存颜色,事实上颜色只用一位即可。
求解为什么按照sizeof(long)对4个字节齐后rb_node变量的地址的低两位就是0
[解决办法]
为什么按照sizeof(long)对4个字节齐后rb_node变量的地址的低两位就是0
你只要知道:因为按4字节对齐的话,每个变量的起始地址都必须是4的倍数,也就是能整除4
那什么样的地址能被4整除:二进制中 4 = 100 ,即起始地址要能被100整除,那这个数必须最后两个是0才行。