【问题标题】:Can I disable/turn off general protection exception when an address is not in canonical form?当地址不是规范形式时,我可以禁用/关闭一般保护异常吗?
【发布时间】:2021-03-06 20:25:01
【问题描述】:

我在网上找到了下面的报价。当指针不是规范地址形式时,是否可以禁用一般保护异常?我在想我的应用程序,如果我可以使用指针的高 4 位来保存额外的数据(例如,如果一个节点是红黑树中的红色或黑色)

虽然实现可能不会使用虚拟地址的所有 64 位,但它们会通过实现的最高有效位检查第 63 位,以查看这些位是全零还是全一。符合此属性的地址被称为规范地址形式。如果虚拟内存引用不是规范形式,则实现会导致一般保护异常或堆栈错误

【问题讨论】:

标签: pointers assembly x86-64 cpu-architecture canonical-form


【解决方案1】:

我不相信。我从未听说过这样的功能,并且浏览英特尔手册以查找“规范”的匹配项并没有发现任何问题。我认为它本质上是硬连线的。

请注意,该架构保留未来实现使用更多位的权利,例如Intel 的 5 级分页 CPU 从 48 位规范地址移至 57 位规范地址。因此,如果这是可能的,任何使用过多高位的程序都将面临与未来 CPU 不兼容的风险。 CPU 制造商对确保前向兼容性很感兴趣,因此他们会抑制提供您想要的功能。

【讨论】:

  • 事实上。规范检查的唯一原因是它们可以在不破坏程序的情况下扩展虚拟地址空间。他们从其他扩展了地址空间的处理器中了解到,例如 68000 系列从 24 位地址空间迁移到 32 位地址空间,这导致了严重的兼容性问题。
猜你喜欢
  • 1970-01-01
  • 2017-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-07
  • 2020-12-23
  • 2012-04-24
  • 2011-02-13
相关资源
最近更新 更多