![](/img/trans.png)
[英]Apparent compile bug in VisualStudio Optimizing Compiler Version 19.00.23506.0
[英]Optimizing compiler removes bug
因此,很多人在堆棧溢出中發布了有關編譯器優化如何將錯誤引入程序的信息。 但是,我遇到了相反的問題。 我正在編寫一個C ++程序,但有一個似乎未定義行為的錯誤,該錯誤僅在將XCode的編譯器設置為off(無[-O0])時才會顯示。 如果將其設置為“最快,最積極的優化[-Ofast]”,則該錯誤會消失。
因此,我想知道是否有人對優化有任何經驗來消除錯誤(而不是更常見的引入錯誤的優化案例)。 有哪些常見原因? 我有點不知所措,無所適從。
優化可以更改表達式的求值順序,因此,例如,如果您的錯誤是foo()
和bar()
的指定求值順序的結果,則為:
some_function(foo(), bar());
那么不同的優化設置將暴露該錯誤,而其他優化設置將其隱藏。
還有許多其他可能性。
啟用優化可能會導致釋放的堆棧/堆內存比調試版本中包含有效數據的時間更長。 一些編譯器甚至在調試版本中清除釋放的堆棧/堆內存,這意味着釋放的數據立即無效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.