gpt4 book ai didi

android - 将一个地址和一个 bool 值存储在一个单词中,用于无锁双向链表

转载 作者:行者123 更新时间:2023-11-28 03:07:38 25 4
gpt4 key购买 nike

我正在阅读一些有关无锁双向链表的论文。在这些论文中,他们将一个地址存储到 next 和 prev 节点以及一个 word(int) 中的标志。

是否因为在 32 位架构中所有地址都在 4 字节边界内对齐所以所有地址都是 4 的倍数?

如果原因是我所说的,这段代码可以吗?

const int dMask = 1;
const int pMask = ~dMask;

int store(void* pPointer, bool pDel)
{
return reinterpret_cast<int>(pPointer) | (int)pDel;
}

void load(int pData, void** pPointer, bool* pDel)
{
*pPointer = reinterpret_cast<void*>(pData & pMask);
*pDel = pData & dMask;
}

还有一个问题:在Android移动设备等其他平台上,上面的想法是否正确?

最佳答案

你或多或少是对的。是公共(public)空间优化在非常低级的代码中。它不可携带。 (你可以让通过使用 intptr_t 而不是 int 它稍微更便携。)

此外,当然,对齐仅适用于指向更多的指针复杂类型; char* 不一定对齐。 (唯一的我看到这个使用的次数是在内存的实现中管理,其中所有涉及的 block 都需要对于任何类型都充分对齐。)

最后,我不确定论文的作者在尝试什么做,但你发布的代码不能在多线程中使用环境,至少在现代机器上。为了保证在一个线程中的修改在另一个线程中看到,你需要使用原子类型,或某种栅栏或成员栏。

关于android - 将一个地址和一个 bool 值存储在一个单词中,用于无锁双向链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19321589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com