问题:
根据 Bjarne Stroustrup 的描述根据 C 的内存模型,现代硬件无法执行涉及小于字的数据的加载或存储操作。然而,作者使用 x86 处理器进行的测试表明它们确实可以存储单字节对象。
答案:
现代指令集架构 (ISA),包括 x86 ,提供执行字节大小存储的指令。这些指令是原子的,不会影响相邻字节。
在内部,一些非 x86 CPU 可能使用 RMW 周期实现字节存储,从而修改缓存行中的整个字。不过,这不会暴露给程序员,也不会影响外部存储的正确性。
Stroustrup 的声明,即现代硬件无法处理小于单词的数据,这是一个不准确的概括。现代 CPU 确实可以有效地加载和存储字节。
一些高性能 CPU 可能使用 RMW 周期在其缓存中实现字节存储。然而,这是一个内部实现细节,不会影响商店的外部可见行为。字节存储仍然是原子的,不会干扰相邻字节。
C 内存模型保证线程可以安全地访问和更新单独的内存位置而不会受到干扰。这种保证的实现留给编译器和硬件组合。
现代 CPU 和内存控制器具有确保字节存储以原子方式正确运行的机制。它们采用缓存一致性协议和专用内存控制器信号等技术来处理字节大小的传输。
虽然现代 CPU 可以有效地处理字节存储,但值得注意的是,某些架构或特定场景可能会导致性能损失。例如,未对齐的字节存储或与 I/O 相关的写入可能会产生额外的开销。
现代硬件无法执行字节大小存储的说法是不准确的。数十年来,主流 CPU 和 ISA 一直提供此功能,确保高效、安全地执行字节相关操作。 C 内存模型依靠这些架构功能来保证正确性并支持高性能软件。
以上是现代 x86 CPU 真的不能将单个字节存储到内存中吗?的详细内容。更多信息请关注PHP中文网其他相关文章!