與並發模型中普遍持有的信念相反,Stroustrup 聲稱現代硬體無法儲存或載入任何比單字小的東西。然而,現代 x86 處理器允許儲存和操作單一位元組。這種明顯的矛盾促使人們對 Stroustrup 的陳述及其意義進行檢視。
Stroustrup 認為,如果沒有明確定義的記憶體模型,並發執行緒可能會幹擾彼此的位元組操作操作,可能會導致錯誤的結果。此論點假設硬體缺乏對原子位元組儲存的明確支持,並可能導致相鄰位元組的無意修改。
對 Stroustrup 聲明的更細緻的解釋是,它可能適用於具有特定內部實現的硬體。 CPU 可以使用讀取-修改-寫入週期來操作高速緩存行內的數據,甚至對於位元組大小的操作也是如此。然而,這些內部操作對於程式設計師來說是透明的,不會影響操作的外部可見性。位元組儲存保持原子性,不會損壞快取行中的相鄰位元組。
雖然沒有原子位元組儲存的假設 ISA 確實可能存在,但所有現代 ISA(包括 x86)都提供位元組- 大小的載入和儲存指令。這些指令在架構上定義為保留相鄰位元組的完整性,確保正確的程式執行。此外,在具有 L1D 快取的現代 CPU 上,位元組和字的處理在很大程度上相似,因為兩者都需要快取行提取和寫回。
Stroustrup 的聲明,雖然可能適用於假設的或過時的硬體設計,不能準確反映現代 x86 處理器的行為。這些處理器提供高效的原子位元組存儲,確保依賴此類操作的軟體的正確性。因此,在現代硬體程式設計的背景下,無需擔心位元組操作會導致記憶體損壞。
以上是現代 x86 硬體真的不能儲存單一位元組嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!