我有一個關於Eclipse CDT和GNU GCC編譯器的簡單問題。GNU GCC編譯器優化和調試
應用程序被編譯在
- 調試模式,即,優化=無(-O0),調試=最大(-g3),與應用在
- 優化模式編譯,即,優化=最大(-O3),調試=無。
除了被它保證在這些2模式編譯該應用程序生成恰好相同的結果?
我將應用發佈到最終用戶,應用程序是基於服務器,它可以處理一些組播數據源。任何人都可以提供一些建議,告訴我應該爲最終用戶選擇哪種編譯模式。
謝謝。
我有一個關於Eclipse CDT和GNU GCC編譯器的簡單問題。GNU GCC編譯器優化和調試
應用程序被編譯在
除了被它保證在這些2模式編譯該應用程序生成恰好相同的結果?
我將應用發佈到最終用戶,應用程序是基於服務器,它可以處理一些組播數據源。任何人都可以提供一些建議,告訴我應該爲最終用戶選擇哪種編譯模式。
謝謝。
它只能保證你的程序將產生相同的結果,如果你的代碼是完全符合標準。有很多方法可以編寫具有「未定義行爲」的代碼,這些代碼實際上可以在未優化的版本上工作,但在優化時可能會中斷。
例如,假設我有:
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
加上編譯O3的時間往往會更長,在開發應用程序時你不會想那麼多。 – ther 2012-04-22 15:45:19
你一定要分配優化的建立別的東西。這可能有助於http://goo.gl/2OlIZ。 – 2012-04-22 06:22:14