問題:
為什麼編譯器不合並將相同值的連續寫入合併到單一原子中變數?
答案:
雖然C 11 / C 14 標準允許將多個存儲折疊為單個存儲,但編譯器不會實現此優化,因為:
1。進度條問題:
下沉和折疊循環儲存可能會導致進度條顯示為零,直到最後跳到 100%,而不是逐步顯示進度。
2.最小驚喜原則:
程式設計師期望每個原子儲存語句都有單獨的記憶體操作,而不是被最佳化掉。這可以避免意外行為。
3.有限的用例:
編譯器已確定這種最佳化有益的場景(例如減少不必要的 Shared_ptr 引用計數操作)很少見。
1。假設規則:
假設規則允許編譯器決定記憶體操作的順序,即使原始碼另有指示。這允許進行可能改變程序行為的內部最佳化。
1. API 擴充:
C 工作小組內正在進行討論,以擴充std::atomic API 以提供對最佳化行為的控制,從而允許編譯器在適當的時候進行最佳化。
2.易失性原子變數:
使用易失性原子
以上是為什麼編譯器不最佳化連續冗餘的「std::atomic」寫入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!