首頁 > 後端開發 > C++ > 為什麼編譯器不最佳化連續冗餘的「std::atomic」寫入?

為什麼編譯器不最佳化連續冗餘的「std::atomic」寫入?

Mary-Kate Olsen
發布: 2024-12-15 06:34:14
原創
595 人瀏覽過

Why Don't Compilers Optimize Consecutive Redundant `std::atomic` Writes?

為什麼編譯器不合併連續的冗餘std::atomic 寫入

問題:

為什麼編譯器不合並將相同值的連續寫入合併到單一原子中變數?

答案:

雖然C 11 / C 14 標準允許將多個存儲折疊為單個存儲,但編譯器不會實現此優化,因為:

實施品質擔憂

1。進度條問題:

下沉和折疊循環儲存可能會導致進度條顯示為零,直到最後跳到 100%,而不是逐步顯示進度。

2.最小驚喜原則:

程式設計師期望每個原子儲存語句都有單獨的記憶體操作,而不是被最佳化掉。這可以避免意外行為。

3.有限的用例:

編譯器已確定這種最佳化有益的場景(例如減少不必要的 Shared_ptr 引用計數操作)很少見。

標準施加的限制

1。假設規則:

假設規則允許編譯器決定記憶體操作的順序,即使原始碼另有指示。這允許進行可能改變程序行為的內部最佳化。

未來發展

1. API 擴充:

C 工作小組內正在進行討論,以擴充std::atomic API 以提供對最佳化行為的控制,從而允許編譯器在適當的時候進行最佳化。

2.易失性原子變數:

使用易失性原子;確保變數的儲存不能被最佳化掉,因為不允許從程式碼中刪除對易失性物件的存取。然而,正如所提供的答案中所討論的,這種方法有其自身的限制。

以上是為什麼編譯器不最佳化連續冗餘的「std::atomic」寫入?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板