cost 63 ms
為什么 C++ 編譯器在使用 RVO 將 POD 移動到可選時不能省略移動?

[英]Why can't the C++ compiler elide the move when moving a POD into an optional with RVO?

考慮以下代碼 ( godbolt ): 如您所見,有一個 function 返回一個大的 POD,然后一個 function 將它包裝到一個std::optional中。 正如在 godbolt 中可見,編譯器在這里創建了一個memcpy ,因此它不能完全忽略移動 object。這是為什么? 如果 ...

as-if 規則是否允許這種執行重新排序

[英]Does as-if rule allow this kind of execution reordering

眾所周知,編譯器或 CPU 可以根據需要重新排序執行,前提是它們遵循 as-if 規則。 例如,如果我們有這樣一段代碼: 編譯器或 CPU 可能在C = A + B之前執行D = E + F 。 我可以理解。 現在讓我們談談另一個案例。 說我有兩個線程a和b 。 我想在執行時設置一些標記,以便我可以 ...

C++ 中復制省略的原理是什么?

[英]What is the rationale behind copy elision in C++?

C++ 標准允許(要求)編譯器優化對復制構造函數的調用(在某些情況下)的原因是什么,即使它可能包含可觀察到的副作用? 如果我沒記錯的話,“好像”規則已經允許編譯器優化不必要的代碼,只要生成的程序模擬標准中定義的抽象機器的可觀察行為。 制定例外規則的動機是什么? 它不會在語言中造成不一致嗎? 方便 ...

C++ 標准中“好像”規則的陳述或基礎在哪里?

[英]Where are the statement of or the foundations for the “as if” rule in the C++ Standard?

經過一點谷歌搜索(例如, site:eel.is "as if rule" ),我找不到在 C++ 標准中明確說明所謂的 "as if" 規則的合適位置。 我所能找到的只是在標准中調用它的那些地方,給出了intro.execution參考。 但是intro.execution似乎並沒有明確引用該規 ...

cppreference 中對寬松排序的解釋是錯誤的嗎?

[英]Is the explanation of relaxed ordering erroneous in cppreference?

在cppreference.com 上的std::memory_order文檔中有一個寬松排序的例子: 輕松下單 標記為memory_order_relaxed原子操作不是同步操作; 它們不會在並發內存訪問之間強加順序。 它們只保證原子性和修改順序的一致性。 例如,x 和 y 最初為零, ...

關於C / C ++標准中的時間/空間復雜性

[英]About time/space complexity in C/C++ standards

最近我讀過關於抽象機器和as-if規則的東西( 究竟什么是“as-if”規則? ),以及對標准庫的時間復雜性的要求(比如這一個: 是list :: size()真的O(n)? )。 標准庫的時間/空間復雜性要求是抽象機器還是實際混凝土機器? 如果這些是抽象機器,那么實現實際上可 ...

為什么復制省略是按條件規則的例外?

[英]Why is copy elision an exception to the as-if rule?

為什么該標准允許我的編譯器即使在涉及可見副作用的情況下也可以應用復制省略,從而違反了常規規則? 當我保證復制保留時,這對我來說似乎是合理的,因為復制/移動的實際功能(將調用程序行為的可見更改)不一定存在,但是為什么/在C +之前是這樣的+17? 是因為編譯器通常無法檢測到副作用(我不 ...

時間與“好像”規則

[英]Timing vs the “as-if” rule

一般來說, 關於“as-if”規則有一個很好的問題,但我想知道在測量時間方面是否有任何例外。 考慮一下(取自此處略有修改): 允許編譯器應用導致相同result任何優化。 這里的重點是“as-if”規則並不直接適用於測量的時間。 當然,在應用優化時,測量的時間不應該是恆定的。 所以我的問題是 ...

as-if規則和刪除分配

[英]as-if rule and removal of allocation

“ as-if規則 ”使編譯器有權優化或重新排序表達式,這些表達式在某些規則下不會對程序的輸出和正確性產生影響,例如; §1.9.5 執行格式良好的程序的一致實現應該產生與具有相同程序和相同輸入的抽象機的相應實例的可能執行之一相同的可觀察行為。 我上面鏈接的cppref ...

為什么無法消除無限循環?

[英]Why can't an infinite loop be eliminated?

這些規則涵蓋“as-if”規則: 符合實施的最低要求是: 嚴格根據抽象機器的規則來評估對volatile對象的訪問。 在程序終止時,寫入文件的所有數據應與根據抽象語義產生的程序執行的可能結果之一相同。 交互設備的輸入和輸出動態應以這樣一種方式進行,即在 ...

循環執行時間為零

[英]Loop with a zero execution time

是否有可能有一個零執行時間的循環? 我認為即使是一個空循環也應該有一個執行時間,因為它有與之相關的開銷。 ...

循環條件下常數的評估

[英]Evaluation of constants in for loop condition

在這個例子中, my_function(MY_CONSTANT)會在每次迭代時被評估,還是會自動存儲? 這取決於使用的優化標志嗎? ...

C ++是否按規則允許商店重新排序?

[英]Is store reordering allowed by C++ as-if rule?

“ 假設 ”規則基本上定義了允許實現在合法C ++程序上執行的轉換。 簡而言之,允許所有不影響程序可觀察行為的轉換。 至於“可觀察到的行為”到底代表什么, cppreference.com似乎與標准給出的輸入/輸出定義不同。 我不確定這是對標准的重新解釋還是錯誤。 cpprefe ...

“好像”規則究竟是什么?

[英]What exactly is the “as-if” rule?

正如標題所說: “好像”規則究竟是什么? 人們會得到的典型答案是: 允許任何和所有不改變程序可觀察行為的代碼轉換的規則 有時,我們會不斷從某些實現中獲取行為,這歸因於此規則。 錯了很多次。 那么,這個規則究竟是什么? 標准沒有明確地將此規則作為一個部分或段落提及,那么該規則的權 ...


 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM