最近想用libuv写个http服务器,看到了这个开源项目haywire,在看到第39次提交的时候,作者用基数树来存储不同路由的controller,不过在后续版本中改为了使用hash,不过想来不如正好学学基数树,作者使用的基数树是这个版本radix_tree,这个版本缺少注释,且和一般思路不一样的使用的是二叉树而非N叉树,为了理解方便,我选择了注释较多的rax
数据结构
首先要提到的是rax的数据结构设计:
typedef struct raxNode {
uint32_t iskey:1; /* Does this node contain a key? */
uint32_t isnull:1; /* Associated value is NULL (don't store it). */
uint32_t iscompr:1; /* Node is compressed. */
uint32_t size:29; /
unsigned char data[];
} raxNode;
这里第一个要说到的点是:你觉得这样一个数据结构的大小是多少?24? 16?