第一种方式:
该方式被很多成熟的软件使用,如php内核,redis内核,nginx内核代码等,一般hashnode结构体的最后一个元素是char key[0]形式,为了动态扩展hash key的长度,是对代码精妙极致的追求。
第二种方式:
该方式目前在lua内核里面看到,需要事先分配好size sizeof(hashnode)大小的内存块,比较图一的实现方式,可以节约size sizoef(void*)个字节的内存,因为需要事先分配好内存,无法像第一种方式动态分配key的长度,所以hashnode得key元素实现方式只能是一个指针,这个指针指向真实的key内容。
我测试发现虽然第二种方式减少了一层指针地址,但是由于无法使用可变长数组的技巧,内存使用上来看第一种方式更占优势。
评论
暂无评论~~