0
A
回答
8
是的。編譯器可以自由地進行程序無法檢測到的更改。由於test
函數沒有外部可見的效果,因此編譯器可以根據自己的意願自由地提前或延遲,甚至完全消除它。
如果你可以解釋一下這種優化方式,使你的代碼做了一些它不應該做的事情,那麼你有什麼東西。但到目前爲止,您唯一的說法是它使您的代碼運行得更慢或更快。編譯器可以自由進行優化,使代碼的某些部分更慢,並且部分部分更快。事實上,這就是優化的本質 - 進行性能折衷,我們希望能產生淨收益。這可能會導致生成的代碼質量不佳,儘管在這種情況下似乎不是,但它肯定是有效的。這就是優化的全部內容。
編譯器將獲取您的源代碼並生成輸出編譯代碼。只要它產生源代碼要求它產生的可觀察結果,就可以自由構建任何它喜歡的編譯代碼。如果它可以找到一種方式來產生相同的效果,它就不需要像源代碼那樣產生輸出。這是整個優化的重點 - 不要從字面上理解你要求它做什麼,而是要產生與其他一些結果相同的結果,希望更好。
3
它歸結爲如果如果規則。只要編譯器的外部行爲與變換之前的行爲不可區分,編譯器就可以自由地轉換程序。
該規則的更精確的表述可以在here找到。請注意,此定義中包含對揮發性物質的訪問,因此您在更改波動率時會看到差異。
相關問題
- 1. 編譯器會優化這個
- 2. LLVM編譯器 - 這是一個優化錯誤嗎?
- 3. 編譯器優化
- 4. 編譯器優化
- 5. 這是有效的優化嗎?
- 6. 克++編譯器的優化
- 7. 哪一個是最優化的C/C++編譯器?
- 8. 這是由C#編譯器完成的優化嗎?
- 9. 編譯器是否允許進行這樣的優化?
- 10. ILSpy反編譯器的這一行代碼是否有效?
- 11. 這是一個優化嗎?
- 12. 這是一個JavaScript優化?
- 13. Delphi編譯器是否執行優化?
- 14. 一個好的C++編譯器會優化一個引用嗎?
- 15. GNU編譯器優化
- 16. C++編譯器優化
- 17. 編譯器優化實現
- 18. PHP編譯器優化
- 19. 編譯器謂語優化
- 20. 優化css編譯器
- 21. Requirejs優化器不編譯
- 22. Java編譯器優化
- 23. 編譯器優化問題
- 24. 二郎編譯器優化
- 25. 的Android JIT編譯器:是編譯/方法優化
- 26. 我應該優化還是讓編譯器來做這件事?
- 27. 編譯器如何優化這一段代碼
- 28. 這是一個編譯器錯誤? (g ++)
- 29. 這是一個編譯器故障?
- 30. 這是一個MSVC++編譯器錯誤?
你應該在這裏發佈實際的問題,而不是僅僅鏈接到問題,因爲鏈接死亡。 –
這個錯誤報告對我來說似乎不一致。你怎麼知道什麼時候調用了'test'? –
@DavidSchwartz:test()需要一段時間才能完成,所以我可以告訴它何時被調用。 – NFRCR