是否可以安全地假设64位指针中的16个高位(2个对我来说足够了)是未设置的
Is it possible to safely assume that the 16 high bits (2 are sufficient for me) in a 64-bit pointer are unset?
我正在构建一个数据结构,它将每2或3位的一个集位设置为64位整数。
如果我也可以在这个结构中存储指针(当它们是树中的终端节点时,但这并不相关),这对我来说会很方便。
为了我的表示(它保证设置最高或第二高的位)的目的,如果可以假设指针从未设置其最高的两位,即这个断言成立:
void *sixty_four_bit_pointer = a_valid_address();
bool always_zero = 0xC000000000000000 & sixty_four_bit_pointer;
那我就可以耍这个把戏了!
这通常是不安全的。正是这样的程序导致了Windows中的/LARGEADDRESSAWARE
标志。(阿卡"这就是为什么我们不能拥有美好的东西。")
你能做的就是使用最底层的比特而不是最顶层的比特。由于您的结构包含一个指针,它已经是8字节对齐的,这意味着底部的三个位总是0,所以您可以将这些位用作标记位。
相关文章:
- 奇怪的(对我来说)返回声明 - 在谷歌上找不到任何关于它的信息
- 对自定义元素向量进行排序时出现意外(至少对我来说)行为
- 这对我来说真的很难,我该怎么办
- mod 功能对我来说无法正常工作
- 在这种情况下,为什么Sfinae对我来说不正确以及如何修复它
- 使用嵌套环以简单(对我来说很难)输出
- 是否可以安全地假设64位指针中的16个高位(2个对我来说足够了)是未设置的
- 无符号和有符号int(对我来说)之间的比较似乎是必需的(c++)
- 第4章 斯特劳斯特鲁普钻头一个具有挑战性的一步(至少对我来说!
- libc ++is_copy_constructible对我来说似乎是错误的
- 对我来说,使 boost::statechart::state_machine 线程安全的最简单方法是什么?
- 未定义的引用错误对我来说没有任何意义
- 类函数在工作时被击中是错过的,即使它们是相同的(对我来说)
- default_random_engine对我来说不是随机值
- 提升异步操作不起作用(对我来说)
- SEG在非常复杂的(对我来说)程序中出错
- 为什么我在Codechef的褪色回文中得到一个WA,即使我在我的代码中没有发现任何错误,它对我来说工作得很好
- 洛基的长寿功能对我来说似乎不安全,是这样吗?
- Q设置对我来说效果不佳
- CUDAMemcpy对我来说毫无意义…为什么要在普通c++中指定设备内存?