像LOCK DEC
这样的x86指令是否可以跨越多个缓存行,或者它们是否会出错?
不询问他们是否,只是它是否允许。
(我知道某些SSE指令必须在缓存边界上对齐)
答案 0 :(得分:4)
是的,这是允许的。你也可以尝试一下。或者阅读指令集参考:
LOCK前缀的完整性不受对齐的影响 记忆领域。任意观察记忆锁定 未对齐的字段。
但另见:
例外
#AC(0)如果启用了对齐检查,并且在当前权限级别为3时进行了未对齐的内存引用。
请注意,通常不启用对齐检查。
答案 1 :(得分:4)
它是允许的,但是你可能会遇到巨大的性能下降,因为锁可能无法在缓存中维护,并且可能会降级为完整的总线锁(有效地完全停止系统)。 / p>
在英特尔486处理器的时代,锁定前缀用于断言a 锁定在公共汽车上以及性能的巨大打击。从...开始 在英特尔奔腾Pro架构中,总线锁被转换为 缓存锁定。最多仍然会在总线上锁定一个锁 现代架构,如果锁位于不可缓存的内存中或者如果 锁延伸超出缓存行边界分割缓存行。 这两种情况都不太可能,因此大多数锁前缀都是 变成了一个更便宜的缓存锁。
它可能会根据处理器规格而有所不同,但请注意另一个考虑因素是跨越边界线也可能意味着越过页面边界,这更难维护(因此甚至更有可能降级)。