2016-02-28 64 views
-5

在c中,我們可以通過啓用標誌-O來啓用優化設置,以啓用所有可能的優化,而-O0將禁用所有啓用的優化。優化設置

我的問題是,這個標誌是消息給誰?意味着編譯器或內核?

+1

看看你的編譯器選項。一般來說,它是'-O'(大寫'O'),然後是優化級別'0-3'(或者對於gcc,「快速」> = 4.6)。 (例如'-O3')他們描述了*編譯器*在生成可執行代碼時應該具有多大的攻擊力。 –

+0

[某些gcc文檔](https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html) – Oka

+0

常用變量可以存儲爲** register **,這可以將循環執行時間減少50 %。 –

回答

1

您提供的所有命令行參數都由編譯器(或編譯器驅動程序,在某些編譯器如gcc的情況下)解釋。然後可以將它們傳遞給編譯器(或編譯器驅動程序)執行的其他程序以完成特定任務。

順便說一句,-o不是一個優化設置,只有很少的編譯器。它通常指定輸出文件的名稱。例如,gcc -c file.c -o anotherfile.o編譯器file.c並生成名爲anotherfile.o的目標文件。

優化設置通常爲-O(例如-O3)。請注意大寫O。它不一定會傳遞給編譯器/驅動程序執行的每個程序。例如,gcc -O3 file.c -o program使用優化設置-O3編譯file.c並生成名爲program的輸出可執行文件。爲此,鏈接器被調用,以及各種編譯階段(預處理器,編譯器正確等)。 -O3通常不會傳遞給鏈接器 - 它是鏈接器通常不理解的編譯選項。

-1

O標誌被傳遞給編譯器,而不是內核。內核與編譯無關。這些標誌決定了優化器如何積極地完成它的工作。一個實際的例子是clang -O3 WannabeObjectFile.c

編輯:我犯了一個錯誤,小寫o標誌用來指定輸出文件。大寫O用於指定優化級別。

+0

非常感謝。 – user5979363