首頁 > 後端開發 > C++ > 現代 x86 CPU 真的不能自動地將單一位元組儲存到記憶體中嗎?

現代 x86 CPU 真的不能自動地將單一位元組儲存到記憶體中嗎?

Linda Hamilton
發布: 2024-12-29 08:49:10
原創
606 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板