首页 > 后端开发 > C++ > 现代 x86 CPU 真的不能自动地将单个字节存储到内存中吗?

现代 x86 CPU 真的不能自动地将单个字节存储到内存中吗?

Linda Hamilton
发布: 2024-12-29 08:49:10
原创
626 人浏览过

Can Modern x86 CPUs Really Not Atomically Store a Single Byte to Memory?

现代 x86 硬件不能将单个字节存储到内存中吗?

Stroustrup 在他的书中的陈述指的是假设硬件的潜在行为,而无需明确定义的内存模型。他建议此类硬件可能会实现具有非原子更新的字节存储,从而可能影响相邻字节。

实际的现代硬件行为

但是,现代硬件,包括 x86,其行为方式与 Stroustrup 描述的方式不同:

  • x86 硬件上的单字节存储是原子的并且不要干扰周围的字节。
  • 使用原子 RMW 周期(读-修改-写)实现字节存储在高性能 CPU 上是不必要的且效率低下。
  • 某些非 x86 CPU 可能会使用原子 RMW 在内部循环以实现字节存储,但这对外部不可见

历史背景

Stroustrup 的声明可能基于早期 Alpha AXP 处理器的行为,该处理器最初不支持字节加载/存储指令。然而,更高版本的 Alpha 和所有现代 CPU 都支持安全高效的字节存储。

硬件实现

现代 CPU 通常使用存储内存段的缓存。在缓存系统中:

  • 缓存行中的所有字节存储都是原子的。
  • CPU 获取整个缓存行,修改字节,并将该行写回内存。
  • 在执行字节更新时,缓存控制器保持对该行的控制,防止其他人意外更改

异常

虽然现代 CPU 提供原子字节存储,但在某些情况下可能会出现异常:

  • 不可缓存内存区域可能没有相同的保护措施,可能允许非原子字节
  • 设备的 I/O 操作在字节级别可能不是原子的。

结论

在实践中,现代硬件支持原子字节存储,使得 Stroustrup 对潜在硬件行为的描述与实际系统不太相关。 C 编译器提供的内存模型保证依赖于现代硬件的可靠行为来确保线程安全。

以上是现代 x86 CPU 真的不能自动地将单个字节存储到内存中吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板