首先是一点背景,我试图在数据结构中存储一堆指针,我想查找值。我不关心有序访问。我想将结构存储在树中以便查找,但是malloc倾向于产生顺序地址,这会导致简单树的病态行为。我知道我可以将指针存储在某种自平衡树中,但是我没有一个库可以为我实现。香草C在这里。所以我想要做的是混合我想要存储的指针的位,这样我就可以实现一个简单的树并避免病态的情况。
我需要能够很好地混合这些位的东西,因为最高位可能都是相同的,最低位通常是页面对齐的,所以底部位通常是空的。
任何能够在没有大量开销的情况下产生良好混合的好方案?
答案 0 :(得分:1)
乘以一个大的奇数值就足够了:(uintptr_t) ptr * 0xcba9876543210fed
。唯一输入值的图像是唯一的Sun Tzu Theorem。
我邀请其他人评论乘数和替代品的选择。