- 论坛徽章:
- 3
|
本帖最后由 dreamice 于 2010-11-10 15:26 编辑
你看看现在linux里面,路由,nf_conntrack,都用了这个hash算法:- static inline u32 jhash_3words(u32 a, u32 b, u32 c, u32 initval)
- {
- a += JHASH_GOLDEN_RATIO;
- b += JHASH_GOLDEN_RATIO;
- c += initval;
- __jhash_mix(a, b, c);
- return c;
- }
- #define __jhash_mix(a, b, c) \
- { \
- a -= b; a -= c; a ^= (c>>13); \
- b -= c; b -= a; b ^= (a<<8); \
- c -= a; c -= b; c ^= (b>>13); \
- a -= b; a -= c; a ^= (c>>12); \
- b -= c; b -= a; b ^= (a<<16); \
- c -= a; c -= b; c ^= (b>>5); \
- a -= b; a -= c; a ^= (c>>3); \
- b -= c; b -= a; b ^= (a<<10); \
- c -= a; c -= b; c ^= (b>>15); \
- }
复制代码 解决hash冲突问题,可以极大的提高性能。 |
评分
-
查看全部评分
|