2013-05-02 47 views
2

如果我使用-O0運行gcc,並且使用諸如here提到的那些技術手動優化我的代碼,那麼當我使用-O3運行gcc時,我的優化代碼運行速度通常會比未優化的代碼快嗎?也就是說,如果我在特定的編譯器優化級別下手動優化代碼,通常情況下,這些優化在不同的(更高或更低)編譯器優化級別下仍然是有生產力的(而不是適得其反)。在不同的gcc優化級別上,手動優化代碼的效果是否一致?

+2

不一定。編譯器很好地理解簡單的代碼,並且可以很好地優化它。編譯器並不能很好地理解複雜的手工優化代碼,因此經常無法優化代碼。但它知道一些常見的成語,並且可以毫無問題地處理這些成語。 – 2013-05-02 18:19:48

回答

0

它在不同的編譯器中可能不一樣。即使編譯器可以取消你的手優化,我的意思是忽略它們。它很大程度上取決於編譯器本身的實現和行爲。大多數優化就像編譯器的請求,可隨時丟棄(大多數情況下無需任何通知)

+0

假設我使用相同的編譯器版本,只是不同的標誌,但? – merlin2011 2013-05-02 18:25:58

+0

對不起,我的答案似乎有點關閉。我談到了不同的編譯器。一般來說,如果它是一個屬性聲明或類似於單獨的'tag'的編譯器,編譯器會盡量保持它作爲用戶約束直到結束。因此,這可能會迫使編譯器放棄原生(內置)優化。但是像代碼流改變那樣的修改,使用不同的操作符都是不同的。所以這些可能讓位於本地優化。因此,您可能會根據輸入得到混合結果。但是這種相互衝突的情況應該很少見。 – abasu 2013-05-02 18:44:01