【发布时间】:2021-03-06 20:25:01
【问题描述】:
我在网上找到了下面的报价。当指针不是规范地址形式时,是否可以禁用一般保护异常?我在想我的应用程序,如果我可以使用指针的高 4 位来保存额外的数据(例如,如果一个节点是红黑树中的红色或黑色)
虽然实现可能不会使用虚拟地址的所有 64 位,但它们会通过实现的最高有效位检查第 63 位,以查看这些位是全零还是全一。符合此属性的地址被称为规范地址形式。如果虚拟内存引用不是规范形式,则实现会导致一般保护异常或堆栈错误
【问题讨论】:
-
不,AFAIK 没有 MSR 或控制寄存器位来要求 CPU 禁用该检查,否则有人会提到它作为屏蔽用于标记指针的高位或低位的替代方法在现有的问答之一中:Can I use some bits of pointer (x86_64) for custom data? And how if possible? / Using the extra 16 bits in 64-bit pointers
标签: pointers assembly x86-64 cpu-architecture canonical-form