GCC中 O1 O2 O3 優化的原理是什麼?

時間 2021-05-06 21:27:34

1樓:

我不知道 gcc 優化級別有什麼用,只知道這個選項。

-finline-functions

Consider all functions for inlining, even if they are not declared inline. The compiler heuristically decides which functions are worth integrating in this way.

2樓:Xi Yang

不不,你完全理解反了。開著-O2、-O3才是人家期望你用來生產最終產品的用法,無優化是給你除錯用的。C++標準容器本來就應當是(在開啟優化的時候)幾乎不產生額外代價的。

3樓:zephyr z

總體來說,優化的目標主要是更小的目標檔案和更短的執行速度。此外,編譯本身需要的記憶體和處理器資源也是需要考慮的。

不幸的是,很多時候這些目標是互相矛盾的,所以有了O[s123]這些選項。比如,O3會做更激進的迴圈展開, 函式內聯, 更耗時的指標別名分析, 更複雜的指令模式匹配 (比如指令的向量化), 更耗時的指令排程, 暫存器分配。 甚至做好幾遍:

暫存器分配前排程一次,之後再排程一次。

最基本的O0就是最簡單的編譯,通常用於Debug版本。

更高階的還有鏈結時優化(全程式)、PGO

4樓:RednaxelaFX

俺來打個醬油。後面有誰來展開解答這個話題就功德無量了。

@vczh 大大講了C++的語言和STL的一側。這只覆蓋了要優化的物件但沒覆蓋如何優化。

@空明流轉 大大講了編譯器優化話題太巨大。話題是巨大,不過總有切入點。

樓主只是想大概知道些名詞但不想太深入的話,可以先從GCC的文件入手:https://

gcc.gnu.org/onlinedocs/

gcc/Optimize-Options.html

這份文件講解了每層-O引數對應哪些具體的優化。每個具體的優化引數是「-f + 優化名」,例如-fdce的優化名是DCE,也就是dead code elimination。

知道優化的名字就可以去搜搜相關資料了。唯一的問題就是GCC用的這些優化名稱可能跟教科書叫法不一樣例如-fmove-loop-invariant在其它資料裡可能更多叫做loop-invariant code motion(LICM)。

更高層一點,還可以從文件中了解一下GCC的工作流程:https://

gcc.gnu.org/onlinedocs/

gccint/Passes.html

從1到100 O2O們的GrowthHack該怎麼玩? 1

已重置 要說緣起的話,其實是因為武漢大學門口要修八一路下穿通道,也就是說把目前平面的武大校門口的馬路給做成地下道,把路面讓出來作為行人路。武大校門口向來是交通混亂之地,過馬路的人非常多,路過的各色車輛也很多,人車混跑,亂成一團,放學時間交通更是近乎癱瘓。八一路是一條在武昌交通上具有重要意義的道路,尤...

外賣O2O的疑惑?

sail 首先,任何商業模式都不是服務全部客戶,外賣平台也不是。外賣平台裡面的商家也分高中低幾檔,對應不同的客戶。所以,外賣平台的價值,體驗不能以自己的感知為判斷。資料和需求擺在這裡。這個事情是靠譜的,不是無腦。美團餓了麼還是在打仗,所以融資,補貼都是必須的。但是,在平台之外,肯定還有大量的細分的機...

低頻高需的O2O產品如何運營?

miss 我們是活動策劃這一塊,確實是個低頻又非剛需的市場,樓上幾個答案都很好回答了關於低頻o2o的運營方法和發展途徑,多謝,學習很多,社群確實是很好的路子。 學習機器李一一 思路很重要。第一 你要對你的使用者進行畫像,哪些使用者可能使用到手機維修O2O產品?這個集群有怎樣的特徵?這是你第乙個要搞懂...