当地址不是规范形式时,我可以 disable/turn 关闭一般保护异常吗?
Can I disable/turn off general protection exception when an address is not in canonical form?
我在网上找到了下面的报价。当指针不是规范地址形式时,是否可以禁用一般保护异常?我在考虑我的应用程序,如果我可以使用指针的高 4 位来保存额外的数据(例如,如果红黑树中的节点是红色或黑色)
Although implementations might not use all 64 bits of the virtual address, they check bits 63 through the most-significant implemented bit to see if those bits are all zeros or all ones. An address that complies with this property is said to be in canonical address form. If a virtual-memory reference is not in canonical form, the implementation causes a general-protection exception or stack fault
我不这么认为。我从来没有听说过这样的功能,并且浏览英特尔手册以查找“规范”的匹配项并没有发现任何东西。我认为它本质上是硬连线的。
请注意,该架构保留未来实施使用更多位的权利,例如Intel 的 5 级分页 CPUs 从 48 位规范地址移动到 57 位规范地址。因此,如果这是可能的,任何使用过多高位的程序都将面临与未来 CPU 不兼容的风险。 CPU 制造商有兴趣确保向前兼容,因此他们会不愿意提供您想要的功能。
我在网上找到了下面的报价。当指针不是规范地址形式时,是否可以禁用一般保护异常?我在考虑我的应用程序,如果我可以使用指针的高 4 位来保存额外的数据(例如,如果红黑树中的节点是红色或黑色)
Although implementations might not use all 64 bits of the virtual address, they check bits 63 through the most-significant implemented bit to see if those bits are all zeros or all ones. An address that complies with this property is said to be in canonical address form. If a virtual-memory reference is not in canonical form, the implementation causes a general-protection exception or stack fault
我不这么认为。我从来没有听说过这样的功能,并且浏览英特尔手册以查找“规范”的匹配项并没有发现任何东西。我认为它本质上是硬连线的。
请注意,该架构保留未来实施使用更多位的权利,例如Intel 的 5 级分页 CPUs 从 48 位规范地址移动到 57 位规范地址。因此,如果这是可能的,任何使用过多高位的程序都将面临与未来 CPU 不兼容的风险。 CPU 制造商有兴趣确保向前兼容,因此他们会不愿意提供您想要的功能。