与并发模型中普遍持有的信念相反,Stroustrup 声称现代硬件无法存储或加载任何比单词小的东西。然而,现代 x86 处理器允许存储和操作单个字节。这种明显的矛盾促使人们对 Stroustrup 的陈述及其含义进行检查。
Stroustrup 认为,如果没有明确定义的内存模型,并发线程可能会干扰彼此的字节操作操作,可能会导致错误的结果。此论点假设硬件缺乏对原子字节存储的显式支持,并可能导致相邻字节的无意修改。
对 Stroustrup 声明的更细致的解释是,它可能适用于具有特定内部实现的硬件。 CPU 可以使用读取-修改-写入周期来操作高速缓存行内的数据,甚至对于字节大小的操作也是如此。然而,这些内部操作对于程序员来说是透明的,不会影响操作的外部可见性。字节存储保持原子性,不会损坏缓存行中的相邻字节。
虽然没有原子字节存储的假设 ISA 确实可能存在,但所有现代 ISA(包括 x86)都提供字节- 大小的加载和存储指令。这些指令在架构上定义为保留相邻字节的完整性,确保正确的程序执行。此外,在具有 L1D 缓存的现代 CPU 上,字节和字的处理在很大程度上相似,因为两者都需要缓存行提取和写回。
Stroustrup 的声明,虽然可能适用于假设的或过时的硬件设计,不能准确反映现代 x86 处理器的行为。这些处理器提供高效的原子字节存储,确保依赖此类操作的软件的正确性。因此,在现代硬件编程的背景下,无需担心字节操作会导致内存损坏。
以上是现代 x86 硬件真的不能存储单个字节吗?的详细内容。更多信息请关注PHP中文网其他相关文章!