微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

按位或使用指针地址的含义

如何解决按位或使用指针地址的含义

虽然我是reading this code的一种ART实现,但我不明白调用SET_LEAF进行按位或使用指针地址的原因

   #define SET_LEAF(x) ((void*)((uintptr_t)x | 1)) 

   *ref = (art_node*)SET_LEAF(make_leaf(key,key_len,value));

我也看到了

#define IS_LEAF(x) (((uintptr_t)x & 1))

看起来是最低有效位,以检查它是否是叶节点。 现在,仅当指针地址为偶数(0x100504080)时,整个参数才有效。

2 | 1 // 3
3 | 1 // 3

是否可以确保指针地址在整个体系结构中始终为偶数?

编辑: 可能重复的How come local types always get an even address

最上面的问题:无论我拥有哪种数据,我都可以安全地假设指针始终从事件号开始吗?

解决方法

从技术上讲这是未定义的行为,但是考虑到他们使用_mm_movemask_epi8的事实,他们可能并不在乎可移植性。在具有标准glibc malloc的x86中,返回的地址应始终与一个字对齐(64位中为8个字节),这意味着它始终是偶数。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。