我偶然发现了一篇关于Xor linked list的维基百科文章,这是一个有趣的琐事,但这篇文章似乎暗示偶尔会在实际代码中使用它。我很好奇它有什么好处,因为我不明白为什么即使在严重的内存/缓存约束系统中它也有意义:
鉴于上述情况,重点是什么?是否有任何奇怪的角落案例,其中xor链表实际上是值得的?
答案 0 :(得分:4)
除了节省内存外,它还允许O(1)反转,同时仍能有效地支持所有其他破坏性更新操作,例如
concat
/ insertAfter
,当您只有对节点及其后继/前任(与标准双向链表略有不同)的引用时insertBefore
,也提到了后继者或前任者。我不认为内存方面非常重要,因为对于您可能使用XOR列表的大多数情况,您可以使用单链接列表。
答案 1 :(得分:1)
其目的是(或者更确切地说 )只是为了节省内存。
使用xor-linked-list,您可以使用普通的双向链表执行任何操作。唯一的区别是每次需要时,必须从每个节点的xor-ed指针解码previous
和next
内存地址。
答案 2 :(得分:1)
这是关于节省内存。我的数据结构是40个字节。内存管理器在16字节边界上对齐事物,因此每个分配为48字节;无论我只需要40个字节,都是事实。通过使用xor链表,我能够消除8个字节并将数据结构大小减小到32个字节。现在,我可以同时在64字节管道缓存中容纳2个节点。因此,我能够减少内存使用并提高性能。