首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

Linux红黑树求解解决思路

2012-09-23 
Linux红黑树求解struct rb_node{unsigned longrb_parent_color#defineRB_RED0#defineRB_BLACK1struct rb_

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才行。

热点排行