Stay Hungry.Stay Foolish.
hashtable两种实现方式

hashtable实现方式

第一种方式: PahZ40.jpg 该方式被很多成熟的软件使用,如php内核,redis内核,nginx内核代码等,一般hashnode结构体的最后一个元素是char key[0]形式,为了动态扩展hash key的长度,是对代码精妙极致的追求。


第二种方式: PahmCV.jpg 该方式目前在lua内核里面看到,需要事先分配好size sizeof(hashnode)大小的内存块,比较图一的实现方式,可以节约size sizoef(void*)个字节的内存,因为需要事先分配好内存,无法像第一种方式动态分配key的长度,所以hashnode得key元素实现方式只能是一个指针,这个指针指向真实的key内容。

优缺点

我测试发现虽然第二种方式减少了一层指针地址,但是由于无法使用可变长数组的技巧,内存使用上来看第一种方式更占优势。

自由转载-非商用-非衍生-保持署名(创意共享3.0许可证
评论

暂无评论~~