linux内核中rb_node的定义如下:
struct rb_node {
unsigned long __rb_parent_color;
struct rb_node *rb_right;
struct rb_node *rb_left;
} __attribute__((aligned(sizeof(long))));
#define rb_parent(r) ((struct rb_node *)((r)->rb_parent_color & ~3))
#define rb_color(r) ((r)->rb_parent_color & 1)
#define rb_set_red(r) do { (r)->rb_parent_color &= ~1; } while (0)
#define rb_set_black(r) do { (r)->rb_parent_color |= 1; } while (0)
我的问题是关于__rb_parent_color
,其中最后一位是颜色,其余的是指向其父级的指针。
我了解到有人说最后 2 位__rb_parent_color
是无用的aligned(sizeof(long))
,但为什么呢?
是不是sizeof(struct rb_node *)
4还是不是sizeof(unsigned long)
4?即使它们不相等,也应该aligned
在Byte中,如果不对齐,至少会有一个完整的 Byte 是无用的?