gpt4 book ai didi

c++ - 是否可以安全地假设 64 位指针中的 16 位高位(2 位对我来说足够)未设置?

转载 作者:太空狗 更新时间:2023-10-29 23:46:05 26 4
gpt4 key购买 nike

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

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

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

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

那我就可以玩这个把戏了!

最佳答案

这通常是不安全的。 Windows 中出现 /LARGEADDRESSAWARE 标志的正是采用此类技巧的程序。 (又名“这就是为什么我们不能拥有好东西。”)

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

关于c++ - 是否可以安全地假设 64 位指针中的 16 位高位(2 位对我来说足够)未设置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13795108/

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