1
  1. 給定一個程序,它使用異常的功能:如果我們一次運行帶有優化的程序,然後我們運行它而不進行優化 - 兩個執行的輸出是相同的?編譯後有無異常優化 - 結果是否相同?

  2. 給定相同的程序,它不使用異常的功能 - 如果我們一次運行優化程序,然後我們運行它沒有優化 - 將兩者的輸出執行是一樣的嗎?

兩個問題是從發生前幾天接受採訪時拍攝...

我認爲第一個問題的答案是否定的 - 因爲當一些代碼行拋出一個異常,範圍是動態的,優化可能會改變程序.Hence,兩個不同的執行(一個優化和一個沒有)的輸出可能是不同的執行順序...

這是正確的嗎?

2nd問題怎麼樣?

非常感謝:)

+1

我不得不回答他們的問題,因爲他們愚蠢地認爲我知道或不知道他們回答他們想要的答案。而實際上,我有問題的極端無意義掙扎,除非它是一個用於任務寫入編譯器? – 2013-02-16 15:57:19

+0

@TonyHopkinson:學生在編程中的位置......你可以假設它也涉及編寫編譯器。 – ron 2013-02-16 16:02:39

+0

不是假設的忠實粉絲。 :( – 2013-02-16 19:51:38

回答

2

優化不應該改變可觀察到的行爲。總的來說,這兩個問題的答案是肯定的。你不提到語言。對於C++,也有很多的情況下行爲是不確定的,如果這是你可能會看到不同的情況。

你寫:

優化可能會改變程序的執行順序。

雖然這是真的,但在某種程度上,C++具有限制重新排序的檢查點的概念。

+0

@Adrian McCarthy,感謝您的編輯。 – jimhark 2013-02-16 16:57:38