如果你知道你确切的内存布局,你可能会这样做,但它有风险.Windows/Mac/Linux最常见的64位系统是amd64.在它们上面,机器只有48位虚拟地址(在可预见的未来),所以你有16位可以在低位对齐的位上进行游戏,理论上说.
除了.地址空间的一半是负数; 地址介于[-2 ^ 47,2 ^ 47]之间.因此,您无法确定指针中设置的位是否实际意味着您的魔术位已设置或者您只有负位置.
除了.今天,大多数(如果不是全部)操作系统将内核放在负地址空间中并将用户空间放在正地址空间中.它使某些事情更容易,更快速地进行管理.所以你可以滥用这些知识来假设玩这些比特应该是安全的.
除了.我从来没有看到任何操作系统的保证这种情况将永远存在(并不意味着一个不存在,我只是没有看到一个).您可能有一天会更新内核,然后操作系统突然确定userland为负数且内核为正数,或者userland获取更多地址空间.
只要你在取消引用指针之前屏蔽掉额外的位,你今天就会安全,但也许不会明天.当你围绕这样的假设构建你的代码时,你得到的所有痛苦,当你逃避的未定义行为成为你不能逃避的未定义行为时.把自己画成这样的角落并不好玩.