我正在阅读一些关于无锁双向链表的论文。在这些论文中,他们将下一个和上一个节点的地址和一个标志存储在一个单词(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移动设备上,上述思路是否正确?