2

我正在构建一个数据结构,它将每 2 位或 3 位设置为 64 位整数。

如果我可以交替地在这个结构中存储一个指针(当它们是树中的终端节点时,但这不相关),那对我来说会很方便。

出于我的表示的目的(保证设置最高或第二高位),如果可以假设指针永远不会设置其最高两位,即这个断言成立:

void *sixty_four_bit_pointer = a_valid_address(); 
bool always_zero = 0xC000000000000000 & sixty_four_bit_pointer;

那么我可以做到这一点!

4

1 回答 1

9

这通常是不安全的。正是这些程序使用了这样的技巧,导致了/LARGEADDRESSAWAREWindows 中的标志。(又名“这就是我们不能拥有美好事物的原因。”)

您可以做的是使用底部位而不是顶部位。由于您的结构包含一个指针,它已经是 8 字节对齐的,这意味着底部三位始终为 0,因此您可以将这些位用作标记位。

于 2012-12-10T04:50:09.203 回答