gpt4 book ai didi

c++ - 标记/编码指针

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:54:19 25 4
gpt4 key购买 nike

我需要一种方法将指针标记为集合 x 的一部分或集合 y 的一部分(即:标记只有 2 个“状态”),我的意思是可以假设未标记 = x 和标记 =是的。

目前我正在考虑使用按位异或来执行此操作:

ptr ^ magic = encoded_ptr
encoded_ptr ^ magic = ptr

但我对如何确定指针是否首先被标记感到困惑。我用它来标记链表中的池节点来自哪些池节点,这样当它们被取消链接时,它们可以返回到正确的perants。

更新

只是为了让所有那些建议将标志存储在额外数据成员中的人清楚,我仅限于 sizeof(void*),所以我不能添加新成员,否则我会。此外,池不是连续的,它们由许多页面组成,跟踪范围会增加太多开销(我正在寻找一个快速简单解决方案,如果可以这样称呼的话)。

最佳答案

大多数解决方案都是特定于平台的。这里有一些:

1) mallocnew 返回的指针将被对齐(4、8、16、32 字节,随你便)。因此,在大多数架构上,地址的几个 LSB 位将始终为 0。

2) Win32特有的方式:除非你的程序使用3GB开关,否则所有用户模式指针的值都小于0x80000000,所以最高位可以用作标志。作为奖励,当标记的指针在未修复的情况下被取消引用时,它也会崩溃。

关于c++ - 标记/编码指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4586002/

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