2012-04-22 130 views
2

我有一個關於Eclipse CDT和GNU GCC編譯器的簡單問題。GNU GCC編譯器優化和調試

應用程序被編譯在

  • 調試模式,即,優化=無(-O0),調試=最大(-g3),與應用在
  • 優化模式編譯,即,優化=最大(-O3),調試=無。
從性能差

除了被它保證在這些2模式編譯該應用程序生成恰好相同的結果?

我將應用發佈到最終用戶,應用程序是基於服務器,它可以處理一些組播數據源。任何人都可以提供一些建議,告訴我應該爲最終用戶選擇哪種編譯模式。

謝謝。

+1

你一定要分配優化的建立別的東西。這可能有助於http://goo.gl/2OlIZ。 – 2012-04-22 06:22:14

回答

6

它只能保證你的程序將產生相同的結果,如果你的代碼是完全符合標準。有很多方法可以編寫具有「未定義行爲」的代碼,這些代碼實際上可以在未優化的版本上工作,但在優化時可能會中斷。

例如,假設我有:

struct A 
{ 
    int i; 
}; 

struct B 
{ 
    int i; 
}; 

int main() 
{ 
    A a; 
    a.i = 10; 
    B* b = reinterpret_cast<B*>(&a); 
    std::cout << b->i << std::endl; 
    return 0; 
} 

這幾乎肯定會打印出10,但是編譯器可以合法地生成代碼,不會因strict aliasing rules

+0

加上編譯O3的時間往往會更長,在開發應用程序時你不會想那麼多。 – ther 2012-04-22 15:45:19