Red-Black Tree 개선된 구조
Red-Black Tree – 삽입 글에서 설명한 것 처럼, RB tree에서 사용하는 구조체의 그림과 코드는 다음과 같다.
struct rb_node { struct rb_node * rb_parent; int rb_color; #define RB_RED 0 #define RB_BLACK 1 struct rb_node * rb_right; struct rb_node * rb_left; };
위 그림에서 rb_color는 단순하게 color값을 나타내는 값인데, 4 bytes를 가지는 int 타입이다. 따라서 parent의 주소값을 가지는 rb_parent의 하위 1bit를 color 값으로 사용한다.
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))));
만약 color 값이 1이 될 때, parent의 주소값에 영향을 미칠 수 있기 때문에, attribute((aligned(sizeof(long))))
를 통해 long 타입에 맞는 address alignment 맞추게 된다.