gpt4 book ai didi

c - 如何在 LSB 指针位中正确存储额外数据?

转载 作者:太空宇宙 更新时间:2023-11-04 07:54:37 24 4
gpt4 key购买 nike

我有一个来自 GTK/glib 2 的 GSList,它们只存储完整的指针,我真的不想要额外的分配。我如何进行位操作以在这些指针中存储额外数据?

我想我不能只拿一个指针然后做 tagged_ptr = ptr | 1(事实上,当我尝试时,编译器会大声提示)。我不确定该怎么做。

然而,这对于单个函数来说肯定是局部的,GSList(或指针)不会泄漏到代码的其余部分。

最佳答案

要对指针的数值执行算术(与指针算术相反,后者不同且高度受限),您需要来回转换为适当的整数类型。如果stdint.h定义 UINTPTR_MAX , 合适的类型是 uintptr_t .如果不是,则没有合适的类型,并且您的(不可移植的)hack 无法在该特定实现上工作。

请注意,您还遇到了假设指针具有低未使用位的问题。如果_Alignof(max_align_t)大于 1,这可能是一个合理的假设,假设实现遵循转换为 uintptr_t 的标准的意图反射(reflect)实现的地址模型(而不是一些任意注入(inject))。但如果不是,那你就不走运了。

关于c - 如何在 LSB 指针位中正确存储额外数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51053116/

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