gpt4 book ai didi

c++ - 在 64 位指针中添加 1 位标志

转载 作者:太空狗 更新时间:2023-10-29 20:39:57 24 4
gpt4 key购买 nike

如果您定义一个 union 来按顺序遍历数据结构(startend 偏移量),或者根据数据元素的数量通过指向树结构的指针一个 64 位系统,其中这些 union 与高速缓存行对齐,是否有可能在这 64 位之一添加一个位标志以便知道必须使用哪个遍历并仍然允许重建正确的指针?

union {
uint32_t offsets[2];
Tree<NodeData> * tree;
};

最佳答案

它依赖于系统,但我认为还没有任何 64 位系统真正使用它的完整指针长度。
此外,如果您知道您的数据是 2n 对齐的,那么那些 n 位很可能只是闲置在那里(在一些旧系统上它们根本不存在。但我不认为这些是 64 位系统,无论如何他们不再感兴趣)。

比如x86_64使用48bits,高16位必须和bit47相同。 (符号扩展)
另一个例子,ARM64 使用 49 位(同时映射 2 个 48 位),所以你只剩下 15 位。

请记住纠正被盗的部分。 (您可能希望使用 uintptr_t 而不是指针,并在更正后进行转换。)

使用未对齐或不可能的指针会导致各种行为,从无声的自动更正、无声的错误行为到响亮的崩溃。

关于c++ - 在 64 位指针中添加 1 位标志,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25934299/

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