我一直在閱讀關於優化代碼中的代碼執行保證的相當多的問題,所以我想編譯一個列表,說明允許/停止編譯器重新排序代碼序列的原因。C++優化中的代碼重新排序在什麼時候停止了?
我已經開始答案,通常是真實的,但我沒有從標準中添加引號(這取自我的經驗)。如果有遺忘或擴大/改正的地方,我會問你是否添加了答案。
此外,有人可以驗證,如果代碼塊不受重新排序。即
void fn()
{
{ /* code block 1 */ ... }
{ /* code block 2 */ ... }
}
是否有可能在代碼code block 1
到混合或執行之前到code block 2
?
許多優化過程不是在C++語句上完成的,而是在彙編指令或某些編譯器特定的內部表示形式上完成的。在這個級別上,沒有C++塊(甚至是單個語句)的概念,因此優化器肯定可以重新安排塊之間的事情。 –
哪個編譯器?優化工具?版?什麼編譯器標誌? – kfsone
@kfsone我在說話,一般來說,考慮到標準什麼是允許的。 – Adrian