問題:
根據 Bjarne Stroustrup 的描述根據 C 的記憶體模型,現代硬體無法執行涉及小於字的資料的載入或儲存操作。然而,作者使用 x86 處理器進行的測試表明它們確實可以儲存單字節物件。
答案:
現代指令集架構 (ISA),包含 x86 ,提供執行位元組大小儲存的指令。這些指令是原子的,不會影響相鄰位元組。
在內部,一些非 x86 CPU 可能使用 RMW 週期實現位元組存儲,從而修改快取行中的整個字。不過,這不會暴露給程式設計師,也不會影響外部儲存的正確性。
Stroustrup 的聲明,即現代硬體無法處理小於單字的數據,這是一個不準確的概括。現代 CPU 確實可以有效地載入和儲存位元組。
一些高效能 CPU 可能使用 RMW 週期在其快取中實現位元組儲存。然而,這是一個內部實現細節,不會影響商店的外部可見行為。位元組儲存仍然是原子的,不會幹擾相鄰位元組。
C 記憶體模型保證執行緒可以安全地存取和更新單獨的記憶體位置而不會受到干擾。這種保證的實作留給編譯器和硬體組合。
現代 CPU 和記憶體控制器具有確保位元組儲存以原子方式正確運作的機制。它們採用快取一致性協定和專用記憶體控制器訊號等技術來處理位元組大小的傳輸。
雖然現代 CPU 可以有效地處理位元組存儲,但值得注意的是,某些架構或特定場景可能會導致效能損失。例如,未對齊的位元組儲存或與 I/O 相關的寫入可能會產生額外的開銷。
現代硬體無法執行位元組大小儲存的說法是不準確的。數十年來,主流 CPU 和 ISA 一直提供此功能,確保高效、安全地執行位元組相關操作。 C 記憶體模型依靠這些架構功能來保證正確性並支援高效能軟體。
以上是現代 x86 CPU 真的不能將單一位元組儲存到記憶體嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!